【脱文标题】 轻松遭遇CRC -----手动脱壳入门第15.5篇 FSG 1.33的变形壳
【脱文作者】 doa007
【作者邮箱】 [email]doc007@163.com[/email]
【使用工具】 Ollydbg,Loadpe,Imprec1.6F
【脱壳平台】 WinXP
【软件简介】 不用多说什么了吧!
【软件大小】 54K
【加壳方式】 FSG 1.3X
这课中我们可以学会对比分析这一重要手段以及遭遇一下CRC
大家还记得教程里的这个地方吗
"手动脱壳入门第十五篇"脱壳动画!
另:如果我没有记错的话,CCG的hoto前辈写的CRACKME就用了这个壳,但是变形的,有难度的。偶把它一起打包了,能脱了它并破了它,就
可以去加入CCG了。
首先感谢网友Lenus在凌晨1时还为我讲解CRC,以及无私的帮助。
用od载入到了如下地方
00430764 > BE A4014000 MOV ESI,1551-cra.004001A4
00430769 AD LODS DWORD PTR DS:[ESI]
0043076A 93 XCHG EAX,EBX
0043076B AD LODS DWORD PTR DS:[ESI]
0043076C 97 XCHG EAX,EDI
0043076D AD LODS DWORD PTR DS:[ESI]
0043076E 56 PUSH ESI
0043076F 96 XCHG EAX,ESI
手动跟吧很容易就到了这里
004307F3 AC LODS BYTE PTR DS:[ESI]
004307F4 84C0 TEST AL,AL
004307F6 ^ 75 FB JNZ SHORT 1551-cra.004307F3
004307F8 FE0E DEC BYTE PTR DS:[ESI]
004307FA ^ 74 F0 JE SHORT 1551-cra.004307EC
004307FC 79 05 JNS SHORT 1551-cra.00430803
004307FE 46 INC ESI
004307FF AD LODS DWORD PTR DS:[ESI]
00430800 50 PUSH EAX
00430801 EB 09 JMP SHORT 1551-cra.0043080C
00430803 FE0E DEC BYTE PTR DS:[ESI]
00430805 - 0F84 5B1EFDFF JE 1551-cra.00402666 出口只能是这里了
0043080B 56 PUSH ESI
0043080C 55 PUSH EBP
0043080D FF53 04 CALL DWORD PTR DS:[EBX+4]
00430810 AB STOS DWORD PTR ES:[EDI]
00430811 ^ EB E0 JMP SHORT 1551-cra.004307F3 这里会回跳
00430813 33C9 XOR ECX,ECX 到这里会跑飞
00430815 41 INC ECX
把光栏移到这里,断点/运行到所选,(F2 F4 F2),回车 再次 断点/运行到所选,(F2 F4 F2)
1.好了,用Lordpe 把它dump出来吧,
2.IAT修复
依照惯例派上了,我们无比信赖的,无坚不摧的.Import.Reconstructor.v1.6.Fanal
填上OEP=00402666-400000=2666,点IAT自动搜索,在点获得输入表,我倒 !!卡壳了
4015438这个地方有个修复不了,剪了它,fix 还是不能运行,怎么办,
肯定是IAT不对正确IAT的大小怎么找呢?
Follow me! 让我们找到真正的IAT的大小:
如果这个时候,你的OD还是停在OEP处没有关掉,那么恭喜你,不须要重新来一次!^-^
看到这里:(要用下ctrl+A才会看到如下形式的代码)
00402666 /. 55 PUSH EBP ; COMCTL32.#240
00402667 |. 8BEC MOV EBP,ESP
00402669 |. 6A FF PUSH -1
0040266B |. 68 00674100 PUSH 1551-cra.00416700
00402670 |. 68 FC504000 PUSH 1551-cra.004050FC ; SE handler installation
00402675 |. 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
0040267B |. 50 PUSH EAX
0040267C |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
00402683 |. 83EC 58 SUB ESP,58
00402686 |. 53 PUSH EBX
00402687 |. 56 PUSH ESI
00402688 |. 57 PUSH EDI
00402689 |. 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
0040268C |. FF15 14524100 CALL DWORD PTR DS:[415214] ;
这里用ctrl+G,输入415438,或是下dd 415438 回车
上下找找,看到了如下两个地方,分别是输入表的首和尾
00415000 77DAEBE7 ADVAPI32.RegSetValueExA
00415004 77DA761B ADVAPI32.RegOpenKeyExA
00415008 77DAEAF4 ADVAPI32.RegCreateKeyExA
0041500C 77DA6BF0 ADVAPI32.RegCloseKey
00415010 00000000
00415014 5D1915DD COMCTL32.InitCommonControls
00415018 00000000
0041501C 77EF5C59 GDI32.SetBkColor
00415020 77EF5BA7 GDI32.SetTextColor
00415024 77EF9A82 GDI32.GetObjectA
00415028 77EF6CA6 GDI32.DeleteDC
0041502C 77EF9884 GDI32.SaveDC
004153E0 77D1A2DE USER32.wsprintfA
004153E4 77D1C4AE USER32.GetForegroundWindow
004153E8 77D1C6E4 USER32.GetMessagePos
004153EC 77D1C78E USER32.SetWindowPos
004153F0 77D1DED3 USER32.SetWindowLongA
004153F4 77D1EE3C USER32.GetPropA
004153F8 77D1CB5F USER32.ShowCaret
004153FC 77D1C416 USER32.IsWindowUnicode
00415400 77D3EC40 USER32.CharNextA
00415404 77D1C64D USER32.InflateRect
00415408 77D2759D USER32.DefDlgProcA
0041540C 77D1F623 USER32.DrawFocusRect
00415410 77D1CE27 USER32.ExcludeUpdateRgn
00415414 77D1CB4B USER32.HideCaret
00415418 77D3E438 USER32.UnregisterClassA
从4 15430- 4 15000=430这个才是真正在输入表大小,再次启用无坚不摧的.Import.Reconstructor.v1.6.Fanal把rva 15000,大小430 oep 2666填
进去后get
然后fix先前的dump,满怀信心的运行一下试试。。。我倒,快要死了还是不行
这就要找原因了,怎么办,把修复过的不能运行的dump_exe用od载入试试,F9运行到了这里就停了,代码如下
0040126B |. 50 PUSH EAX ; /Arg2
0040126C |. 51 PUSH ECX ; |Arg1
0040126D |. E8 00F00000 CALL dumped1_.00410272
;\dumped1_.00410272
00401272 |. 81BD D8FDFFFF>CMP DWORD PTR SS:[EBP-228],0FB45
0040127C |. 7E 02 JLE SHORT dumped1_.00401280
0040127E CD 13 INT 13
00401280 |> 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C]
00401283 |. 895E 64 MOV DWORD PTR DS:[ESI+64],EBX
00401286 |. 895E 60 MOV DWORD PTR DS:[ESI+60],EBX
停在了40127e这一行,向上找找
00401272 |. 81BD D8FDFFFF>CMP DWORD PTR SS:[EBP-228],0FB45
0040127C |. 7E 02 JLE SHORT dumped1_.00401280
一个经典的比较语句,和这个怪东西比较什么呢,要想到这就是CRC的特点
我们再次载入原始文件到前面的00401272处停下来,F8后 看到了没有?(如图 右边是原始文件)原
始程序是不会执行这个int 13的,把它nop吧,再次运行nop过这句的dump_exe,终于看不到MS的那句很酷的名言了,启动winhex修改一下 ,脱
壳成功。至于破解,由于我算法上较弱写不出来,愿网友早日能完成,并通知我一下QQ35523153
再次感谢Lenus在凌晨1时的帮助 !!
Doc007于2004年10月15日凌晨2:26分
(如有网友不懂CRC校验请自行查阅看雪论坛资料)
[课程]Android-CTF解题方法汇总!