首页
社区
课程
招聘
[翻译]自解密中的乐趣
发表于: 2018-6-25 14:55 3563

[翻译]自解密中的乐趣

2018-6-25 14:55
3563

2018-02-25,作者ViRb3

校对id:玉林小学生

译者id:frust

[本文作者为ViRb3,如果想在本博客发表文章,请先参考链接]

一个月前我正在参加每年一度的Hack Cambridged大会。且不说以往的编程和社交,在这次CTF比赛中,遭遇了强大对手——Avast团队。实际上,这也在很大程度上鼓舞了我,于是把任务带回家并在此完工。所有难题里面有一个非常有意思——一段两次自解密代码泄露了一点个秘密!我们今天就借助x64dbg来解析这个秘密。关于比赛更多信息参考文末。

经过之前的分析后,我们得到如下代码

===========================================================

| [ ADDR3S5  ] - [ H3X DUMP    ] ------ [ C0MM4ND                        ] |

===========================================================

| [ 00401000 ] > [ 31 C0       ] ------ [ XOR EAX,EAX                    ] |

| [ 00401002 ] . [ B0 40        ] ------ [ MOV AL,40                      ] |

| [ 00401004 ] . [ C1 E0 10   ] ------ [ SHL EAX,10                     ] |

| [ 00401007 ] . [ 80 F4 20    ] ------ [ XOR AH,20                      ] |

| [ 0040100A ] . [ FF D0        ] ------ [ CALL EAX                       ] |

| [ 0040100C ] . [ 50               ] ------ [ PUSH EAX                       ] |

| [ 0040100D ] . [ 8A 50 03    ] ------ [ MOV DL,BYTE PTR DS:[EAX+3]     ] |

| [ 00401010 ] . [ 30 54 01 04 ] ------ [ XOR BYTE PTR DS:[EAX+ECX+4],DL ] |

| [ 00401014 ] . [ FE C1         ] ------ [ INC CL                         ] |

| [ 00401016 ] . [ 80 F9 64     ] ------ [ CMP CL,64                      ] |

| [ 00401019 ] . [ 75 F5          ] ------ [ JNE SHORT 00401010             ] |

| [ 0040101B ] . [ 80 E9 5F    ] ------ [ SUB CL,5F                      ] |

| [ 0040101E ] . [ 00 C8         ] ------ [ ADD AL,CL                      ] |

| [ 00401020 ] . [ FF D0         ] ------ [ CALL EAX                       ] |

| [ 00401022 ] . [ F4               ] ------ [ HLT                            ] |

============================================================================

| [ ADDR3S5  ] - [ M3M0RY H3X DUMP                                       ] |

===========================================================

| [ 00402000 ] : [ 31 C9 C3 C0 | 1E 40 2C D0 | 3E 80 CA 41 | B0 CB C0 C0 ] |

| [ 00402010 ] : [ C9 DA 40 A8 | D3 DA 40 A8 | D8 F3 F0 00 | 90 03 2F D7 ] |

| [ 00402020 ] : [ 94 4A 1F 00 | 9E EC 3A 97 | DD 9E D9 EE | AD 3C 96 0D ] |

| [ 00402030 ] : [ E0 DF 9E E7 | 32 6B F7 D8 | 1D EA E1 CD | 6A 7E 6F 04 ] |

| [ 00402040 ] : [ 0A 0A 0A 0B | 0A 0A 0A 0B | 02 0B 7C 0A | 0A 0A 0B 0A ] |

| [ 00402050 ] : [ 0A 79 0C 0B | 0D 0C 09 03 | 03 79 0A 7F | 02 7C 7F 03 ] |

| [ 00402060 ] : [ 7F 0B 7C 08 | 03 79 0A 7F | 00 00 00 00 | 00 00 00 00 ] |

===========================================================

针对上述情况主要有两种方法:用x86模拟器(比如Unicorn),或者用调试器劫持执行流并用上面dump文件里的指令替换原来执行流,我觉得后者更有趣并且更便捷。于是这种情况下我们用第二个方法继续深入下去。

首先,我们需要将dump下来的数据以字节的形式查看。这一步我手动完成的,并以如下形式分隔hex转储和内存转储。

Hex dump (starts at 0x00401000):

Hex dump (从0x00401000开始):

31 C0 B0 40 C1 E0 10 80 F4 20 FF D0 50 8A 50 03 30 54 01 04 FE C1 80 F9 64 75 F5 80 E9 5F 00 C8 FF D0 F4

Memory dump (starts at 0x00402000):

Memory dump (从0x00402000开始):

31 C9 C3 C0 1E 40 2C D0 3E 80 CA 41 B0 CB C0 C0 C9 DA 40 A8 D3 DA 40 A8 D8 F3 F0 00 90 03 2F D7

94 4A 1F 00 9E EC 3A 97 DD 9E D9 EE AD 3C 96 0D E0 DF 9E E7 32 6B F7 D8 1D EA E1 CD 6A 7E 6F 04

0A 0A 0A 0B 0A 0A 0A 0B 02 0B 7C 0A 0A 0A 0B 0A 0A 79 0C 0B 0D 0C 09 03 03 79 0A 7F 02 7C 7F 03

7F 0B 7C 08 03 79 0A 7F 00 00 00 00 00 00 00 00

然后我们需要找出一段可执行空间。启动x32dbg(不是x64dbg,因为当前我们处理的是32位代码),打开任意一个32位可执行程序。这里我们直接打开x32.dbg自身得了。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//