首页
社区
课程
招聘
轻松遭遇CRC -----手动脱壳入门第15.5篇 FSG 1.33的变形壳
发表于: 2004-10-15 02:59 5154

轻松遭遇CRC -----手动脱壳入门第15.5篇 FSG 1.33的变形壳

2004-10-15 02:59
5154
【脱文标题】 轻松遭遇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校验请自行查阅看雪论坛资料)

[课程]Linux pwn 探索篇!

收藏
免费 1
支持
分享
最新回复 (3)
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
脱壳很简单,要看算法就难了...CRACKME怎么拿出来公开讨论了...??
2004-10-15 05:01
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
3
学习
2004-10-15 08:09
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
4
请不要公开讨论各组织的CrackMe
thank
2004-10-15 16:20
0
游客
登录 | 注册 方可回帖
返回
//