首页
社区
课程
招聘
[求助]菜鸟求助,tElock1.0脱壳
发表于: 2013-6-6 13:52 4258

[求助]菜鸟求助,tElock1.0脱壳

2013-6-6 13:52
4258
这个软件是tElock1.0的壳脱了好久,一开始找到OEP之后,软件可以打开但是弹出错误提示框,以为是有自校验,后来论坛有人告诉我是脱壳后IAT没修复好。然后参考论坛的一篇文章开始脱壳,无奈在修改magic跳之后总是到达伪oep,所以求助各位大侠。。
下面是我的脱壳过程:
首先OD载入程序,设置除了忽略kernel32异常之外,其他异常全部不忽略,插件隐藏OD
入口代码

0093E09D >^\E9 5EDFFFFF     jmp RED_MC.0093C000
0093E0A2    0000            add byte ptr ds:[eax],al
0093E0A4    00B9 5EE6BBE5   add byte ptr ds:[ecx+E5BBE65E],bh
0093E0AA    E0 53           loopdne short RED_MC.0093E0FF
0093E0AC    0000            add byte ptr ds:[eax],al
0093E0AE    0000            add byte ptr ds:[eax],al
0093E0B0    0000            add byte ptr ds:[eax],al
0093E0B2    0000            add byte ptr ds:[eax],al
0093E0B4    0005 E15300F5   add byte ptr ds:[F50053E1],al
0093E0BA    E0 53           loopdne short RED_MC.0093E10F
0093E0BC    00ED            add ch,ch
0093E0BE    E0 53           loopdne short RED_MC.0093E113
0093E0C0    0000            add byte ptr ds:[eax],al
0093E0C2    0000            add byte ptr ds:[eax],al
0093E0C4    0000            add byte ptr ds:[eax],al
0093E0C6    0000            add byte ptr ds:[eax],al
0093E0C8    0012            add byte ptr ds:[edx],dl
然后shift+F9运行,经过17次异常后到最后一次异常处

0093DC6B    64:FF31         push dword ptr fs:[ecx]
0093DC6E    64:8921         mov dword ptr fs:[ecx],esp
0093DC71    FF01            inc dword ptr ds:[ecx]-----------------到这里
0093DC73  ^ EB E8           jmp short RED_MC.0093DC5D
0093DC75    33C2            xor eax,edx
0093DC77    40              inc eax
0093DC78    2BC9            sub ecx,ecx
0093DC7A    64:8F01         pop dword ptr fs:[ecx]
0093DC7D    59              pop ecx
0093DC7E    E8 00000000     call RED_MC.0093DC83
0093DC83    98              cwde
0093DC84    8B2C24          mov ebp,dword ptr ss:[esp]
0093DC87    58              pop eax
0093DC88    81ED 3F294100   sub ebp,RED_MC.0041293F
0093DC8E    98              cwde
0093DC8F    2BF6            sub esi,esi
0093DC91    81C6 34767D80   add esi,807D7634
0093DC97    81F6 515E3C80   xor esi,803C5E51
0093DC9D    33C5            xor eax,ebp

此时看堆栈的值:

0012FF40   0012FFC4  指针到下一个 SEH 记录
0012FF44   0093DC63  SE 句柄----------------------看这里
0012FF48   00000000
0012FF4C   00000000
0012FF50   0053AA24  RED_MC.0053AA24

在CPU窗口ctrl+G到:0093DC63

0093DC63    8B6424 08       mov esp,dword ptr ss:[esp+8]----这里F2下断
0093DC67    EB 0C           jmp short RED_MC.0093DC75
0093DC69    2BC9            sub ecx,ecx
0093DC6B    64:FF31         push dword ptr fs:[ecx]
0093DC6E    64:8921         mov dword ptr fs:[ecx],esp
0093DC71    FF01            inc dword ptr ds:[ecx]

然后shift+F9运行,取消断点

将鼠标向上拖到代码的最顶上处

0093C000    000400          add byte ptr ds:[eax+eax],al----------这里
0093C003    006469 74       add byte ptr ds:[ecx+ebp*2+74],ah
0093C007    694D 5A 5000020>imul ecx,dword ptr ss:[ebp+5A],20050
0093C00E    0000            add byte ptr ds:[eax],al
0093C010    04 00           add al,0
0093C012    0F00            ???                                      ; 未知命令
0093C014    FFFF            ???                                      ; 未知命令

于是在命令行下:tc eip<0093c000,中断在OEP处

007E4FDC    55              push ebp
007E4FDD    8BEC            mov ebp,esp
007E4FDF    B9 05000000     mov ecx,5
007E4FE4    6A 00           push 0
007E4FE6    6A 00           push 0
007E4FE8    49              dec ecx
007E4FE9  ^ 75 F9           jnz short RED_MC.007E4FE4
007E4FEB    53              push ebx
007E4FEC    56              push esi
007E4FED    57              push edi
007E4FEE    B8 10467D00     mov eax,RED_MC.007D4610
007E4FF3    E8 38ACC2FF     call RED_MC.0040FC30
007E4FF8    8B1D 40437F00   mov ebx,dword ptr ds:[7F4340]            ; RED_MC.007FA3EC
007E4FFE    33C0            xor eax,eax
007E5000    55              push ebp
007E5001    68 D9527E00     push RED_MC.007E52D9
007E5006    64:FF30         push dword ptr fs:[eax]
007E5009    64:8920         mov dword ptr fs:[eax],esp
007E500C    A1 5C457F00     mov eax,dword ptr ds:[7F455C]
007E5011    66:C780 BE00000>mov word ptr ds:[eax+BE],2E

在这里脱壳,然后修复的时候指针全部无效,用用ImportREC的level 1还是level 2、level 3及tElock插件都无法搜索到有效的函数,IAT已经被加密了
之后我就卡在这里了,本人菜鸟,求教大侠如何解密IAT

未脱壳软件地址:http://pan.baidu.com/share/link?shareid=1132602126&uk=1780446887

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 4367
活跃值: (4348)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
直接 BP VirtualFree 返回

然后 CODE段下内存访问断点到第一个CALL  往上一点就是OEP

到了OEP后
IAT是这样子

0087DCEC  770F4880  oleaut32.SysFreeString
0087DCF0  770FA3EC  oleaut32.SysReAllocStringLen
0087DCF4  770F4B39  oleaut32.SysAllocStringLen
0087DCF8  00000000
0087DCFC  77DA6FFF  advapi32.RegQueryValueExW
0087DD00  77DA6AAF  advapi32.RegOpenKeyExW
0087DD04  77DA6C27  advapi32.RegCloseKey
0087DD08  00000000
0087DD0C  01030000
0087DD10  01030022
0087DD14  01030044
0087DD18  00000000
0087DD1C  01040000
0087DD20  01040022
0087DD24  01040044
0087DD28  0104007C
0087DD2C  0104009E
0087DD30  010400C0
0087DD34  010400E2
0087DD38  01040104
0087DD3C  0104013C
0087DD40  0104015E
0087DD44  01040180
0087DD48  010401A2
0087DD4C  010401C4
0087DD50  010401FC
0087DD54  0104021E
0087DD58  01040240
0087DD5C  01040262
0087DD60  01040284
0087DD64  010402BC
0087DD68  010402DE
0087DD6C  01040300
0087DD70  01040322
0087DD74  01040344
0087DD78  0104037C
0087DD7C  0104039E
0087DD80  010403C0
0087DD84  010403E2
0087DD88  01040404
0087DD8C  0104043C
0087DD90  0104045E
0087DD94  01040480
0087DD98  010404A2
0087DD9C  010404C4
0087DDA0  010404FC
0087DDA4  0104051E
0087DDA8  01040540
0087DDAC  01040562
0087DDB0  01040584
0087DDB4  010405BC
0087DDB8  010405DE
0087DDBC  01040600
0087DDC0  01040622
0087DDC4  01040644
0087DDC8  0104067C
0087DDCC  0104069E
0087DDD0  010406C0
0087DDD4  010406E2
0087DDD8  01040704
0087DDDC  0104073C
0087DDE0  0104075E
0087DDE4  01040780
0087DDE8  010407A2
0087DDEC  010407C4
0087DDF0  010407FC
0087DDF4  0104081E
0087DDF8  01040840
0087DDFC  00000000
0087DE00  7C80AE40  kernel32.GetProcAddress
0087DE04  7C812AA9  kernel32.RaiseException
0087DE08  7C801D7B  kernel32.LoadLibraryA

像 01040562 这样子的值不显示API名称的时候就是被加密了

然后跟进去一看

01040562    35 31CE5C7F     xor eax, 0x7F5CCE31                      ; 花指令
01040567    B8 68050401     mov eax, 0x1040568
0104056C    EB 02           jmp short 01040570                       ; 花指令
0104056E    CD 20           int 0x20                                 ; 花指令
01040570    05 18000000     add eax, 0x18
01040575    8B00            mov eax, dword ptr ds:[eax]
01040577    35 62050401     xor eax, 0x1040562
0104057C    90              nop
0104057D    90              nop
0104057E    50              push eax
0104057F    C3              retn

---------------------------------------------------------------------------------

01040562    90              nop                                      ; 花指令
01040563    90              nop
01040564    90              nop
01040565    90              nop
01040566    90              nop
01040567    B8 68050401     mov eax, 0x1040568
0104056C    90              nop                                      ; 花指令
0104056D    90              nop
0104056E    90              nop                                      ; 花指令
0104056F    90              nop
01040570    05 18000000     add eax, 0x18                            ; [1040568 + 18]  xor 1040562 =  7C8097D0 API地址
01040575    8B00            mov eax, dword ptr ds:[eax]
01040577    35 62050401     xor eax, 0x1040562
0104057C    90              nop
0104057D    90              nop
0104057E    50              push eax
0104057F    C3              retn

7C8097D0  kernel32.GetCurrentThreadId

像这种过多的情况就要用脚本来处理. 可以自己研究研究如何去写
2013-6-6 15:13
0
游客
登录 | 注册 方可回帖
返回
//