[反汇编练习-番外篇] Delphi专攻
本帖最后由 44018723 于 2014-6-13 23:12 编辑[反汇编练习-番外篇] Delphi专攻鉴于OD在Delphi反汇编这一块的薄弱,狠狠研究了下当前的手段。
大家常用的反编译除了OD(ollydebug)、IDA,还有Delphi用的Dede,C#用的NetReflector,还有几个跟踪易语言的。其实反汇编的利器还有很多,在吾爱云盘中收录了:http://down.52pojie.cn/Tools/Disassemblers/
AS3.Sorcerer.v2.72.CracKed.By.REPT.7z 28-Mar-2014 10:59 5MC32Asm.rar 28-Dec-2013 14:52 1MDJ.Java.Decompiler.v3.12.12.96-CRD.rar 28-Dec-2013 14:53 7MHex-Rays.IDA.Pro.Advanced.v6.1.rar 28-Dec-2013 14:53 106MHopper Disassembler v2.7.13 For Windows.rar 28-Dec-2013 14:52 26MIDA Pro Advanced 5.5 with Hex-Rays 1.1.rar 28-Dec-2013 14:52 88MIDR (Interactive Delphi Reconstructor).rar 28-Dec-2013 14:52 54MSWFDecompiler.rar 28-Dec-2013 14:52 12MVB.Decompiler.Pro.v8.3.RETAIL.INCL_KEYGEN+PATCH..> 28-Dec-2013 14:53 6MVB.Decompiler.Pro.v9.2.RETAIL.BY-1ST.INCL_KEYGE..> 28-Dec-2013 14:52 5MYogda.1.0.564.zip 28-Dec-2013 14:52 4M
我们可能不是总能用到,但是遇到一些不常见的程序时,他们往往能排上大用处。
这次要用到的就是IDR,它和xxx(忘了,明天补上)都是针对Delphi反编译的利器,相对于Dede对于高版本Delphi的无力,他们两个就算是很强大了!在网上搜索发现,IDR有专门的网站,并且最近做了一次更新,所以,毫无疑问地选择了它。
新版本下载地址:http://pan.baidu.com/s/1xUWOY密码: jbnq 文件名为:IDR_exe.7z程序界面如下:
http://images.cnitblog.com/blog/573547/201406/132301125459030.png
这里我们接着使用IDR分析ajj.2脱壳后的程序。首先,直接将脱壳后的CKme002.exe拖到IDR界面上,提示:use native knowledge base? 直接点【是】,然后等待它分析完毕。
http://images.cnitblog.com/blog/573547/201406/132301155774271.png
双击左侧列表中最后的CKme单元,在下面的框中会出现这个单元所有的事件和特殊信息,双击每行就可以在右上侧看到反汇编信息。在列表中我们可以看到TForm1.FormCreate的窗体创建信息,TForm1.Button1MouseDown按钮1的鼠标按下消息等….
我们可以随意查看,当看到 CKme::TForm1.Edit2DblClick 你是不是觉得很可疑?IDR反汇编信息如下(代码比较多,只给出部分):
CKme::TForm1.Edit2DblClick
00446FF8 push ebp
00446FF9 mov ebp,esp
00446FFB xor ecx,ecx
00446FFD push ecx
00446FFE push ecx
00446FFF push ecx
00447000 push ecx
00447001 push ecx
00447002 push ebx
00447003 mov ebx,eax
00447005 xor eax,eax
00447007 push ebp
00447008 push 4470DF
0044700D push dword ptr fs:
00447010 mov dword ptr fs:,esp
00447013 lea edx,
00447016 mov eax,dword ptr ; TForm1.Edit2:TEdit
0044701C call TControl.GetText
00447021 mov eax,dword ptr
00447024 call @LStrLen
00447029 cmp eax,8
>0044702C jne 004470C4
00447032 lea edx,
00447035 mov eax,dword ptr ; TForm1.Edit2:TEdit
0044703B call TControl.GetText
00447040 mov eax,dword ptr
00447043 cmp byte ptr ,5F
>00447047 jne 004470C4
00447049 lea edx,
0044704C mov eax,dword ptr ; TForm1.Edit2:TEdit
00447052 call TControl.GetText
00447057 mov eax,dword ptr
0044705A cmp byte ptr ,2C
>0044705E jne 004470C4
代码和OD很像,Call部分都有相应的函数替换,我们在OD中加载,然后Ctrl+G, 输入这段代码的开始地址:00446FF8,下断,然后…然后怎么让他触发功能,断下呢?
不知大家还记得不?之前在Dede可以看到两个编辑框,而这里只有一个显示出来了,正好我们想要就是那个被隐藏的。好吧,我们第一件事就是将隐藏的Edit2显示出来。怎么做呢?
刚才我们看到的第一个事件:TForm1.FormCreate,随便翻翻,就可以发现有好几个与Edit2相关的:
00446C89 xor edx,edx
00446C8B mov eax,dword ptr ; TForm1.Edit2:TEdit
00446C91 mov ecx,dword ptr
00446C93 call dword ptr ; TLabel.SetEnabled
00446C96 xor edx,edx
00446C98 mov eax,dword ptr ; TForm1.Edit2:TEdit
00446C9E call TLabel.SetVisible
代码中每次Call之前都进行了xor edx,edx将edx的值清零,这里与其他显示的控件mov edx,1特别可疑,我们在2个xor edx,edx下面的mov下断,Ctrl+F2 重新加载程序,在OD右侧修改edx的值为1,F9运行,再次修改下一个。再看看界面,Edit2是不是已经出来了?我们再回到Edit2双击事件那里,分析下代码,然后找到头地址:00446FF8,在OD中对照IDR中的反汇编,进行F8单步调试。其中Delphi文本处理函数反汇编说明见网址:http://www.cnblogs.com/bbdxf/p/3787684.html 。分析之后的代码如下:
00446FF8/.55 push ebp ;//CKme::TForm1.Edit2DblClick
00446FF9|.8BEC mov ebp,esp
00446FFB|.33C9 xor ecx,ecx
00446FFD|.51 push ecx
00446FFE|.51 push ecx
00446FFF|.51 push ecx
00447000|.51 push ecx
00447001|.51 push ecx
00447002|.53 push ebx
00447003|.8BD8 mov ebx,eax
00447005|.33C0 xor eax,eax
00447007|.55 push ebp
00447008|.68 DF704400 push 004470DF
0044700D|.64:FF30 push dword ptr fs:
00447010|.64:8920 mov dword ptr fs:,esp
00447013|.8D55 FC lea edx,
00447016|.8B83 F0020000 mov eax,dword ptr ds: ;TForm1.Edit2:TEdit
0044701C|.E8 6BD0FDFF call 0042408C ;TControl.GetText
00447021|.8B45 FC mov eax,
00447024|.E8 5FCBFBFF call 00403B88 ;@LStrLen
00447029|.83F8 08 cmp eax,0x8 ;字符长度为8
0044702C|.0F85 92000000 jnz 004470C4
00447032|.8D55 F8 lea edx,
00447035|.8B83 F0020000 mov eax,dword ptr ds: ;TForm1.Edit2:TEdit
0044703B|.E8 4CD0FDFF call 0042408C ;TControl.GetText
00447040|.8B45 F8 mov eax,
00447043|.8078 01 5F cmp byte ptr ds:,0x5F ;第二个字符为0x5F='_'
00447047|.75 7B jnz short 004470C4
00447049|.8D55 F4 lea edx,
0044704C|.8B83 F0020000 mov eax,dword ptr ds: ;TForm1.Edit2:TEdit
00447052|.E8 35D0FDFF call 0042408C ;TControl.GetText
00447057|.8B45 F4 mov eax,
0044705A|.8078 05 2C cmp byte ptr ds:,0x2C ;第6个字符为0x2C=','
0044705E|.75 64 jnz short 004470C4
00447060|.8D55 F0 lea edx,
00447063|.8B83 E8020000 mov eax,dword ptr ds: ;TForm1.Edit1:TEdit
00447069|.E8 1ED0FDFF call 0042408C ;TControl.GetText
0044706E|.8B45 F0 mov eax,
00447071|.E8 12CBFBFF call 00403B88 ;@LStrLen
00447076|.83C0 03 add eax,0x3
00447079|.B9 03000000 mov ecx,0x3
0044707E|.99 cdq
0044707F|.F7F9 idiv ecx
00447081|.85D2 test edx,edx
00447083|.75 3F jnz short 004470C4
00447085|.6A 00 push 0x0
00447087|.6A 04 push 0x4
00447089|.8D55 EC lea edx,
0044708C|.8B83 E8020000 mov eax,dword ptr ds: ;TForm1.Edit1:TEdit
00447092|.E8 F5CFFDFF call 0042408C ;TControl.GetText
00447097|.8B45 EC mov eax,
0044709A|.E8 E9CAFBFF call 00403B88 ;@LStrLen
0044709F|.99 cdq
004470A0|.52 push edx
004470A1|.50 push eax
004470A2|.33C0 xor eax,eax
004470A4|.E8 E70EFCFF call 00407F90 ;DiskFree
004470A9|.030424 add eax,dword ptr ss:
004470AC|.135424 04 adc edx,dword ptr ss:
004470B0|.83C4 08 add esp,0x8
004470B3|.83C0 02 add eax,0x2
004470B6|.83D2 00 adc edx,0x0
004470B9|.E8 47ECFBFF call 00405D05 ;@_llmod
004470BE|.8983 0C030000 mov dword ptr ds:,eax ;TForm1.?f30C:dword
004470C4|>33C0 xor eax,eax
004470C6|.5A pop edx
004470C7|.59 pop ecx
004470C8|.59 pop ecx
004470C9|.64:8910 mov dword ptr fs:,edx
004470CC|.68 E6704400 push 004470E6
004470D1|>8D45 EC lea eax,
004470D4|.BA 05000000 mov edx,0x5
004470D9|.E8 4EC8FBFF call 0040392C ;@LStrArrayClr
004470DE\.C3 retn
004470DF .^ E9 BCC2FBFF jmp 004033A0
004470E4 .^ EB EB jmp short 004470D1 ;@HandleFinally
004470E6 .5B pop ebx
004470E7 .8BE5 mov esp,ebp
004470E9 .5D pop ebp
004470EA .C3 retn
第一个编辑框Edit1不知道有什么要求,Edit2要求第二个字符为’_’,第六个字符为’,’,字符长度为8,别的都无要求。继续分析别的事件,。。。。无收获。。。难道只能爆破??
不错啊,顶一下 本帖最后由 shuguang 于 2014-6-30 21:18 编辑
这个是第五课的例子吗 dych1688 发表于 2014-6-29 22:04
楼主找个师傅 估计很多人都乐于教你
{:301_999:}先把160个大概弄完了再弄其他事情,毕竟这不是主业,没太多的时间能投入进去。 楼主找个师傅 估计很多人都乐于教你 好东西 支持一下 学习学习,先收藏一下 谢谢分享 好东西--- 我也在这块困惑 不知道你研究的怎么样了 这个程序的算法? 方便交流一下吗?
页:
[1]
2