首页
社区
课程
招聘
Obsidium1.2.5.0主程序脱壳记录点滴
发表于: 2005-3-13 19:09 15582

Obsidium1.2.5.0主程序脱壳记录点滴

2005-3-13 19:09
15582

这不是完整的脱文,只是简单记录一下我自己认为的一些要点,太多的细节我也不知所以然,
能蒙混过去的我就暂且欺骗一下自己了,我也懒得去跟踪每一段代码的细节
这个1.25版本和上次脱的1.20版难易度基本差不多,现在完全忘了上次怎么脱的了
这次多花了不少时间,所以这次才决定留下点简单记录
如果你自己亲自跟踪过,我想应该能看懂我的思路

开工喽:
set seh:memory voilation
set seh:div 0
ignore others

第一次div 0
008D9A28   F7F0             DIV EAX                              ;第一次div 0
008D9A2A   8381 B8000000 02 ADD DWORD PTR DS:[ECX+B8],2
008D9A31   5B               POP EBX
008D9A32   5D               POP EBP
008D9A33   C3               RETN

008D99DB   64:8F00          POP DWORD PTR FS:[EAX]               ;goto here
008D99DE   83C4 04          ADD ESP,4
008D99E1   5B               POP EBX
008D99E2   C3               RETN

bp VirtualAlloc
0044DE1C   FF93 80000000    CALL DWORD PTR DS:[EBX+80]           ;VirtualAlloc
0044DE22   85C0             TEST EAX,EAX                         ;返回这里,eax=9F0000
0044DE24   0F84 3A010000    JE Obsidium.0044DF64                 ;new imagebase

下面开始解码过程
解码后这里处理reloc,为了脱壳后使base定位在400000h,就需要在这里做些手脚了,大家自己想吧
0044DF27   8B43 10          MOV EAX,DWORD PTR DS:[EBX+10]        ;new imagebase
0044DF2A   2B43 10          SUB EAX,DWORD PTR DS:[EBX+3C]        ;old imagebase
0044DF2D   FF77 08          PUSH DWORD PTR DS:[EDI+8]
0044DF30   FF77 04          PUSH DWORD PTR DS:[EDI+4]
0044DF33   FF73 78          PUSH DWORD PTR DS:[EBX+78]
0044DF36   50               PUSH EAX
0044DF37   FF73 10          PUSH DWORD PTR DS:[EBX+10]
0044DF3A   FF53 70          CALL DWORD PTR DS:[EBX+70]
0044DF3D   83C7 14          ADD EDI,14
0044DF40   FF4D FC          DEC DWORD PTR SS:[EBP-4]
0044DF43  ^0F85 F4FEFFFF    JNZ Obsidium.0044DE3D

继续shift F9几次看到这样的代码:
008DC4B2   F7F0             DIV EAX                              ;div 0
008DC4B4   8B00             MOV EAX,DWORD PTR DS:[EAX]           ;紧接着一个这样的异常
008DC4B6   85C0             TEST EAX,EAX
008DC4B8   74 19            JE SHORT 008DC4D3
008DC4BA   8B53 04          MOV EDX,DWORD PTR DS:[EBX+4]
008DC4BD   C702 07000000    MOV DWORD PTR DS:[EDX],7
008DC4C3   C740 08 00000000 MOV DWORD PTR DS:[EAX+8],0
008DC4CA   8343 04 0C       ADD DWORD PTR DS:[EBX+4],0C
008DC4CE   52               PUSH EDX
008DC4CF   51               PUSH ECX
008DC4D0   FF63 4C          JMP DWORD PTR DS:[EBX+4C]
008DC4D3   64:67:8F06 0000  POP DWORD PTR FS:[0]                 ;goto here
008DC4D9   83C4 04          ADD ESP,4
008DC4DC   5B               POP EBX
008DC4DD   C3               RETN

下面是关于IAT处理的:
ctrl+g 8DC5D0 ,hard break point on exec
(关于8DC5D0这个地址是怎么找到的,我是多次运行过去,观察后下硬件断点,逐层回溯过来的
然后把它记下来了,让我重新再找一次的话,我也要尝试并思考几次才能定位的)
F9 两次停到这里:
008DC5D0   E8 3F040000      CALL 008DCA14                        ;
008DC5D5   85C0             TEST EAX,EAX
008DC5D7   74 55            JE SHORT 008DC62E
008DC5D9   8B45 F4          MOV EAX,DWORD PTR SS:[EBP-C]
008DC5DC   05 679D4100      ADD EAX,419D67
008DC5E1   8B56 04          MOV EDX,DWORD PTR DS:[ESI+4]
008DC5E4   0353 44          ADD EDX,DWORD PTR DS:[EBX+44]
008DC5E7   52               PUSH EDX
008DC5E8   50               PUSH EAX
008DC5E9   E8 26040000      CALL 008DCA14
008DC5EE   85C0             TEST EAX,EAX
008DC5F0   74 3C            JE SHORT 008DC62E
...
008DC692   FF36             PUSH DWORD PTR DS:[ESI]
008DC694   53               PUSH EBX
008DC695   52               PUSH EDX
008DC696   50               PUSH EAX
008DC697   FF76 0C          PUSH DWORD PTR DS:[ESI+C]
008DC69A   E8 F4000000      CALL 008DC793                        ;进入

下面关于还原IAT代码的修改,我直接借鉴前人有关OB脱壳文章中的方法,仍然有效
008DC793   55               PUSH EBP
008DC794   8BEC             MOV EBP,ESP
008DC796   56               PUSH ESI
008DC797   57               PUSH EDI
008DC798   8B75 10          MOV ESI,DWORD PTR SS:[EBP+10]
008DC79B   8B7D 0C          MOV EDI,DWORD PTR SS:[EBP+C]
008DC79E   66:F706 2000     TEST WORD PTR DS:[ESI],20            ;改为 TEST WORD PTR DS:[ESI],8
008DC7A3   74 46            JE SHORT 008DC7EB                    ;改为 JNE SHORT 008DC7EB
008DC7A5   66:F706 0200     TEST WORD PTR DS:[ESI],2
008DC7AA   75 1F            JNZ SHORT 008DC7CB
008DC7AC   66:C706 0400     MOV WORD PTR DS:[ESI],4
008DC7B1   8B45 14          MOV EAX,DWORD PTR SS:[EBP+14]
008DC7B4   6A 01            PUSH 1
008DC7B6   6A 00            PUSH 0
008DC7B8   FF76 04          PUSH DWORD PTR DS:[ESI+4]
008DC7BB   6A 00            PUSH 0
008DC7BD   FF75 18          PUSH DWORD PTR SS:[EBP+18]
008DC7C0   FF50 50          CALL DWORD PTR DS:[EAX+50]
008DC7C3   85C0             TEST EAX,EAX                         ;改为 JE SHORT 008DC7EB
008DC7C5   74 38            JE SHORT 008DC7FF
008DC7C7   8907             MOV DWORD PTR DS:[EDI],EAX
008DC7C9   EB 20            JMP SHORT 008DC7EB
008DC7CB   66:C706 0400     MOV WORD PTR DS:[ESI],4
008DC7D0   8B45 14          MOV EAX,DWORD PTR SS:[EBP+14]
008DC7D3   0FB756 02        MOVZX EDX,WORD PTR DS:[ESI+2]
008DC7D7   6A 01            PUSH 1
008DC7D9   52               PUSH EDX
008DC7DA   6A 00            PUSH 0
008DC7DC   FF76 04          PUSH DWORD PTR DS:[ESI+4]
008DC7DF   FF75 18          PUSH DWORD PTR SS:[EBP+18]
008DC7E2   FF50 50          CALL DWORD PTR DS:[EAX+50]
008DC7E5   85C0             TEST EAX,EAX
008DC7E7   74 16            JE SHORT 008DC7FF                    ;改为 JE SHORT 008DC7EB
008DC7E9   8907             MOV DWORD PTR DS:[EDI],EAX
008DC7EB   83C6 08          ADD ESI,8
008DC7EE   83C7 04          ADD EDI,4
008DC7F1   FF4D 08          DEC DWORD PTR SS:[EBP+8]
008DC7F4  ^75 A8            JNZ SHORT 008DC79E
008DC7F6   33C0             XOR EAX,EAX
008DC7F8   40               INC EAX
008DC7F9   5F               POP EDI
008DC7FA   5E               POP ESI
008DC7FB   5D               POP EBP
008DC7FC   C2 1400          RETN 14

stolen code 我没去找,我只是翻看一下代码,看到下面这个就知道oep就在附近,自己手工修复几行就可以了
009F15FE           43 2B 2B 48 4F 4F 4B                       C++HOOK
OB是从这里开始进入原始程序代码的:
009F161E   E8 A1B41500      CALL 00B4CAC4
009F1623   8BD0             MOV EDX,EAX
009F1625   E8 46E11400      CALL 00B3F770
009F162A   5A               POP EDX
009F162B   E8 A4E01400      CALL 00B3F6D4
009F1630   E8 7BE11400      CALL 00B3F7B0
009F1635   6A 00            PUSH 0
009F1637   E8 80F61400      CALL 00B40CBC

象下面这种结构是动态解码的SDK
009F1BB0   68 A4000000      PUSH 0A4                             ;len
009F1BB5   FF15 EA104000    CALL DWORD PTR DS:[4010EA]
...
009F1C5F   68 A4000000      PUSH 0A4
009F1C64   FF15 EE104000    CALL DWORD PTR DS:[4010EE]

修改下面代码用于SDK FIX:
008DB38C   55               PUSH EBP
008DB38D   8BEC             MOV EBP,ESP
008DB38F   81EC 30010000    SUB ESP,130
008DB395   60               PUSHAD
008DB396   E8 00000000      CALL 008DB39B
008DB39B   5E               POP ESI
008DB39C   8D96 60010000    LEA EDX,DWORD PTR DS:[ESI+160]
008DB3A2   33C0             XOR EAX,EAX
008DB3A4   52               PUSH EDX
008DB3A5   83C5 04          ADD EBP,4                            ;已修改
008DB3A8   BE 7FD34400      MOV ESI,44D37F                       ;
008DB3AD   90               NOP                                  ;
008DB3AE   90               NOP                                  ;
008DB3AF   EB 02            JMP SHORT 008DB3B3                   ;
008DB3B1  ^EB FA            JMP SHORT 008DB3AD
008DB3B3   8B7D 04          MOV EDI,DWORD PTR SS:[EBP+4]
008DB3B6   8D85 D0FEFFFF    LEA EAX,DWORD PTR SS:[EBP-130]
008DB3BC   50               PUSH EAX
008DB3BD   57               PUSH EDI
008DB3BE   FF96 30010000    CALL DWORD PTR DS:[ESI+130]
...
008DB437   2B46 10          SUB EAX,DWORD PTR DS:[ESI+10]
008DB43A   8B4E 3C          MOV ECX,DWORD PTR DS:[ESI+3C]         ; Obsidium.00400000
008DB43D   8B55 08          MOV EDX,DWORD PTR SS:[EBP+8]
008DB440   2B4E 10          SUB ECX,DWORD PTR DS:[ESI+10]
008DB443   81E2 FFFFFF1F    AND EDX,1FFFFFFF
008DB449   52               PUSH EDX
008DB44A   50               PUSH EAX
008DB44B   FF76 78          PUSH DWORD PTR DS:[ESI+78]
008DB44E   51               PUSH ECX
008DB44F   FF76 10          PUSH DWORD PTR DS:[ESI+10]
008DB452   83C4 14          ADD ESP,14                           ;已修改,为了定位到400000
008DB455   8B45 08          MOV EAX,DWORD PTR SS:[EBP+8]
008DB458   8D8D F0FEFFFF    LEA ECX,DWORD PTR SS:[EBP-110]
008DB45E   25 FFFFFF1F      AND EAX,1FFFFFFF
008DB463   50               PUSH EAX
008DB464   FF75 04          PUSH DWORD PTR SS:[EBP+4]
008DB467   6A 0E            PUSH 0E
008DB469   51               PUSH ECX
008DB46A   FF56 28          CALL DWORD PTR DS:[ESI+28]
008DB46D   837E 70 00       CMP DWORD PTR DS:[ESI+70],0
008DB471   74 52            JE SHORT 008DB4C5
008DB473   F745 08 00000080 TEST DWORD PTR SS:[EBP+8],80000000
008DB47A   75 49            JNZ SHORT 008DB4C5
008DB47C   8B45 04          MOV EAX,DWORD PTR SS:[EBP+4]
008DB47F   8B4E 10          MOV ECX,DWORD PTR DS:[ESI+10]
008DB482   8B55 08          MOV EDX,DWORD PTR SS:[EBP+8]
008DB485   2B46 10          SUB EAX,DWORD PTR DS:[ESI+10]
008DB488   2B4E 3C          SUB ECX,DWORD PTR DS:[ESI+3C]
008DB48B   81E2 FFFFFF1F    AND EDX,1FFFFFFF
008DB491   52               PUSH EDX
008DB492   50               PUSH EAX
008DB493   FF76 78          PUSH DWORD PTR DS:[ESI+78]
008DB496   51               PUSH ECX
008DB497   FF76 10          PUSH DWORD PTR DS:[ESI+10]
008DB49A   83C4 14          ADD ESP,14                           ;已修改,为了定位到400000
...
008DB4E5   FF96 1C020000    CALL DWORD PTR DS:[ESI+21C]
008DB4EB   83ED 04          SUB EBP,4                            ;已修改
008DB4EE   90               NOP                                  ;
008DB4EF   90               NOP                                  ;
008DB4F0   90               NOP                                  ;
008DB4F1   83C4 04          ADD ESP,4
008DB4F4   61               POPAD
008DB4F5   8BE5             MOV ESP,EBP
008DB4F7   5D               POP EBP
008DB4F8   C2 0400          RETN 4

有了上面的一段修改,随便找个空闲空间写入下面代码,就可以修复动态解码的SDK
009F0800   BE 00109F00      MOV ESI,9F1000
009F0805   4E               DEC ESI
009F0806   46               INC ESI
009F0807   81FE 00E0B400    CMP ESI,0B4E000         
009F080D   7D 41            JGE SHORT 009F0850
009F080F   803E 68          CMP BYTE PTR DS:[ESI],68
009F0812  ^75 F2            JNZ SHORT 009F0806
009F0814   66:817E 05 FF15  CMP WORD PTR DS:[ESI+5],15FF
009F081A  ^75 EA            JNZ SHORT 009F0806
009F081C   817E 07 EA104000 CMP DWORD PTR DS:[ESI+7],4010EA
009F0823  ^75 E1            JNZ SHORT 009F0806
009F0825   FF76 01          PUSH DWORD PTR DS:[ESI+1]
009F0828   8D46 0B          LEA EAX,DWORD PTR DS:[ESI+B]
009F082B   50               PUSH EAX
009F082C   FF15 EA104000    CALL DWORD PTR DS:[4010EA]           ;8DB38C,进入我们上面那段修改过的还原SDK代码
009F0832   5A               POP EDX
009F0833   8BFE             MOV EDI,ESI
009F0835   B0 90            MOV AL,90
009F0837   B9 0B000000      MOV ECX,0B
009F083C   F3:AA            REP STOS BYTE PTR ES:[EDI]
009F083E   03FA             ADD EDI,EDX
009F0840   B9 0B000000      MOV ECX,0B
009F0845   F3:AA            REP STOS BYTE PTR ES:[EDI]
009F0847   83C6 0B          ADD ESI,0B
009F084A  ^EB BA            JMP SHORT 009F0806
009F084C   90               NOP
009F084D   90               NOP
009F084E   90               NOP
009F084F   90               NOP
009F0850   CC               INT 3
009F0851   90               NOP
009F0852   90               NOP
009F0853   90               NOP

还有一种有key才能还原的SDK保护代码,没key的情况下手工修改跳过就可以了,我不解释了
我思维已经有些混乱了,因此写内容也比较混乱,错误之处欢迎指正,想扔鸡蛋的请使点劲
就到这里结束吧,还有剩下的其他一些体力活就略过了

heXer
2005.3.13


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

收藏
免费 7
支持
分享
最新回复 (14)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
坐坐沙发。学习中。
2005-3-13 19:14
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
3
强人
2005-3-13 19:15
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
奇怪,heXer贴的主程序怎么与fly在exetools贴的不一样?

------------------------------------------------------------------------
  <Offset>                  <File 1 Byte>             <File 2 Byte>
------------------------------------------------------------------------
00000106h:                      08h                            07h
000001c0h:                      00h                            e0h
000001c1h:                      d0h                            1fh
000001c2h:                      17h                            18h
00000251h:                      50h                            70h
00000259h:                      50h                            70h
00000271h:                      74h                            69h
00000272h:                      6ch                            64h
00000273h:                      73h                            61h
00000274h:                      00h                            74h
00000275h:                      00h                            61h
00000279h:                      10h                            40h
0000027dh:                      c0h                            e0h
00000281h:                      10h                            40h
00000285h:                      c0h                            e0h
00000299h:                      72h                            74h
0000029ah:                      64h                            6ch
0000029bh:                      61h                            73h
0000029ch:                      74h                            00h
0000029dh:                      61h                            00h
000002a5h:                      d0h                            20h
000002a6h:                      17h                            18h
000002adh:                      d0h                            20h
000002aeh:                      17h                            18h
000002c1h:                      69h                            72h
000002c2h:                      64h                            65h
000002c3h:                      61h                            6ch
000002c4h:                      74h                            6fh
000002c5h:                      61h                            63h
000002c9h:                      50h                            80h
000002cah:                      00h                            01h
000002cdh:                      e0h                            30h
000002ceh:                      17h                            18h
000002d1h:                      50h                            80h
000002d2h:                      00h                            01h
000002d5h:                      e0h                            30h
000002d6h:                      17h                            18h
000002eah:                      65h                            73h
000002ebh:                      6ch                            72h
000002ech:                      6fh                            63h
000002edh:                      63h                            00h
000002f1h:                      80h                            90h
000002f2h:                      01h                            04h
000002f5h:                      30h                            b0h
000002f6h:                      18h                            19h
000002f9h:                      80h                            90h
000002fah:                      01h                            04h
000002fdh:                      30h                            b0h
000002feh:                      18h                            19h
00000310h:                      2eh                            00h
00000311h:                      72h                            00h
00000312h:                      73h                            00h
00000313h:                      72h                            00h
00000314h:                      63h                            00h
00000319h:                      90h                            00h
0000031ah:                      04h                            00h
0000031dh:                      b0h                            00h
0000031eh:                      19h                            00h
00000321h:                      90h                            00h
00000322h:                      04h                            00h
00000325h:                      b0h                            00h
00000326h:                      19h                            00h
00000334h:                      40h                            00h
00000337h:                      c0h                            00h
0017d001h:                      c0h                            00h
0017d002h:                      57h                            00h
0017d004h:                      cch                            00h
0017d005h:                      c0h                            00h
0017d006h:                      57h                            00h
0017d008h:                      cch                            00h
0017d009h:                      c0h                            00h
0017d00ah:                      57h                            00h
00181fe1h:                      00h                            20h
00181fe2h:                      00h                            58h
00181fe4h:                      00h                            cch
00181fe5h:                      00h                            20h
00181fe6h:                      00h                            58h
00181fe8h:                      00h                            cch
00181fe9h:                      00h                            20h
00181feah:                      00h                            58h
00198616h:                      00h                            04h
00198617h:                      00h                            39h
0019a94ah:                      00h                            0ch
0019a94bh:                      00h                            30h
2005-3-13 19:52
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
5
没啥大变化
tls数据位置不同
2005-3-13 19:55
0
雪    币: 392
活跃值: (909)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
6
老大总是那么谦虚
2005-3-13 20:50
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
7
学习学习...  
2005-3-13 21:55
0
雪    币: 3835
活跃值: (4402)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
8
鸡蛋鸡蛋砸死hexer
2005-3-14 09:02
0
雪    币: 239
活跃值: (478)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
强,支持!
2005-3-14 09:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
进来学习学习,老大看来近来很闲
2005-3-14 10:12
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
11
牛哥!!!
2005-3-14 15:45
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
12
强人
2005-3-16 10:38
0
雪    币: 234
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
用Obsidium加密的程序,在我的机器上运行极慢,不知道是怎么回事。
2005-3-16 16:58
0
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
14
楼主好 h,h,h 牛XXXX
2005-3-16 21:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
强哥!!
2005-3-17 20:54
0
游客
登录 | 注册 方可回帖
返回
//