首页
社区
课程
招聘
[原创]手脱tElock 0.98
发表于: 2009-4-11 21:22 7837

[原创]手脱tElock 0.98

2009-4-11 21:22
7837

这壳有脱壳机了,但是我是为了学习.  当然之前肯定有人发过.
不过我再发一次  当是我的笔记吧.

目标是这个
http://bbs.pediy.com/attachment. ... 15&d=1239364186
经过 sessiondiy大虾的指点  我终于都弄明白了.

(我OD调试选项是忽略所有异常)
首先找OEP
这个就不多说了  区段2内存访问断点就行,可以找到OEP为00404356.

到OEP后IAT没修复,随便找了个无效的004180a4先记录下来.

重新载入,

he 00404356  (oep)   f9运行.
中断在这   0040e0a3
/*42E07F*/  POP EBP
/*42E080*/  LEA EAX,DWORD PTR SS:[EBP+46]
/*42E083*/  PUSH EAX
/*42E084*/  XOR EAX,EAX
/*42E086*/  PUSH DWORD PTR FS:[EAX]
/*42E089*/  MOV DWORD PTR FS:[EAX],ESP
/*42E08C*/  INT3
/*42E08D*/  NOP
/*42E08E*/  MOV EAX,EAX
/*42E090*/  STC
/*42E091*/  NOP
/*42E092*/  LEA EAX,DWORD PTR DS:[EBX*2+1234]
/*42E099*/  CLC
/*42E09A*/  NOP
/*42E09B*/  SHR EBX,5
/*42E09E*/  CLD
/*42E09F*/  NOP
/*42E0A0*/  ROL EAX,7
/*42E0A3*/  NOP                  中断在这.
/*42E0A4*/  NOP
/*42E0A5*/  XOR EBX,EBX
/*42E0A7*/  DIV EBX
/*42E0A9*/  POP DWORD PTR FS:[0]
/*42E0AF*/  ADD ESP,4
/*42E0B2*/  MOV SI,4647
/*42E0B6*/  MOV DI,4A4D
/*42E0BA*/  MOV AL,BYTE PTR SS:[EBP+99]
/*42E0C0*/  JMP CrackME.0042E161
/*42E0C0*/  JMP CrackME.0042E161
/*42E0C5*/  MOV EAX,DWORD PTR SS:[ESP+4]
/*42E0C9*/  MOV ECX,DWORD PTR SS:[ESP+C]
/*42E0CD*/  INC DWORD PTR DS:[ECX+B8]
/*42E0D3*/  MOV EAX,DWORD PTR DS:[EAX]
/*42E0D5*/  CMP EAX,C0000094
/*42E0DA*/  JNZ SHORT CrackME.0042E100
/*42E0DC*/  INC DWORD PTR DS:[ECX+B8]
/*42E0E2*/  XOR EAX,EAX
/*42E0E4*/  AND DWORD PTR DS:[ECX+4],EAX
/*42E0E7*/  AND DWORD PTR DS:[ECX+8],EAX
/*42E0EA*/  AND DWORD PTR DS:[ECX+C],EAX
/*42E0ED*/  AND DWORD PTR DS:[ECX+10],EAX
/*42E0F0*/  AND DWORD PTR DS:[ECX+14],FFFF0FF0
/*42E0F7*/  AND DWORD PTR DS:[ECX+18],0DC00
/*42E0FE*/  JMP SHORT CrackME.0042E160
/*42E100*/  CMP EAX,80000004
/*42E105*/  JE SHORT CrackME.0042E113
/*42E107*/  CMP EAX,80000003
/*42E10C*/  JE SHORT CrackME.0042E120
/*42E10E*/  PUSH 1
/*42E110*/  POP EAX
/*42E111*/  JMP SHORT CrackME.0042E160
/*42E113*/  CALL CrackME.0042E119
/*42E118*/  ADD EBX,DWORD PTR DS:[EAX-2]
/*42E11B*/  ADD BYTE PTR DS:[EBX],CH
/*42E11D*/  SHR BL,40
/*42E120*/  MOV EAX,DWORD PTR DS:[ECX+B4]
/*42E126*/  LEA EAX,DWORD PTR DS:[EAX+24]
/*42E129*/  MOV DWORD PTR DS:[ECX+4],EAX
/*42E12C*/  MOV EAX,DWORD PTR DS:[ECX+B4]
/*42E132*/  LEA EAX,DWORD PTR DS:[EAX+1F]
/*42E135*/  MOV DWORD PTR DS:[ECX+8],EAX
/*42E138*/  MOV EAX,DWORD PTR DS:[ECX+B4]
/*42E13E*/  LEA EAX,DWORD PTR DS:[EAX+1A]
/*42E141*/  MOV DWORD PTR DS:[ECX+C],EAX
/*42E144*/  MOV EAX,DWORD PTR DS:[ECX+B4]
/*42E14A*/  LEA EAX,DWORD PTR DS:[EAX+11]
/*42E14D*/  MOV DWORD PTR DS:[ECX+10],EAX
/*42E150*/  XOR EAX,EAX
/*42E152*/  AND DWORD PTR DS:[ECX+14],FFFF0FF0
/*42E159*/  MOV DWORD PTR DS:[ECX+18],155
/*42E160*/  RET

这段代码真是经典代码

具体意思如下:

若是 INT 3 则 占用 Dr0~Dr3 , 值为 42E090'42E099'42E09E'42E0A3
        若是 80000004 则 byte[0042E118] 加 1
        若是 除零 , 则清除 Dr0~Dr3

在过了int3异常后,占用 Dr0~Dr3 , 值为 42E090'42E099'42E09E'42E0A3

四个调试寄存器全部被占用,因此之前下的硬件断点都失效了。
除非过了除0异常以后再下硬件断点 才可以。

并且他还保证了byte[0042E118]=4  必须等于4,才能正确解码,那么只有过了这段代码后把byte[0042E118]等于4才可以下硬件断点。

那我就在
42e0a9  恢复seh链的地方.
/*42E0A9*/  POP DWORD PTR FS:[0]
/*42E0AF*/  ADD ESP,4
/*42E0B2*/  MOV SI,4647

42e0a9 处下f2,F9后删除F2,并且把byte[0042E118]=4,这样就过了断点检测了.

现在再dd 004180a4  下内存写入断点  F9执行
这时要边按F9边看数据窗口和地址窗口.

我也记不清按了几次F9
到了这里
/*42F4E5*/  MOV DWORD PTR DS:[EAX],ECX

数据窗口是这样的
ECX=003F0011
DS:[004180A4]=0001D1DE

这时正是加密完填充的时候.
可是我们当然不能让他加密啊
那就看代码,看哪里能跳过这个地方把.

我往上拉着看,见有跳转的 我鼠标就按上去  看看他跳到哪里
最终我找到了这里
/*42F41E*/  JE CrackME.0042F4F3

如果这个跳转每次都实现他就能跳过加密,哈哈
那把他改为jmp不就可以了吗.

好吧  重新来过.

和前面同样的步骤
直到过了 断点检测后  我再he 42f41e  f9到了后我把je改为jmp  删除该断点

再he 00404356 (oep)
F9  
好了现在可以DUMP了
完了再用ImportREC.OEP填上4356   自动搜索IAT和大小.

最后点获取输入表,  哈哈全是有效的.修复转储文件后 也能正常运行了.

这壳终于被我脱掉了

真不好脱啊.
这个壳让我学习到了 ANTI断点的精彩代码.
再此再次感谢伟大的  sessiondiy.


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (7)
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
2
由 0042E0C5 开始是 SEH, 其代码列出你最好参考我当时回你的帖子的列出方式.
否则..因为 byte[0042E118] 也含在里面. 造成了乱码. 根本看不出
0042E113    E8 01000000     call    0042E119
0042E118    db 00
0042E119    58              pop     eax
0042E11A    FE00            inc     byte ptr [eax]

另外..开头第4行你没设连结.
2009-4-12 09:36
0
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
3
这壳正准备手脱练习,收藏练习后对照学习一下。
2009-4-12 13:56
0
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
4
这壳正准备手脱练习,收藏练习后,对照学习一下。
2009-4-12 14:12
0
雪    币: 107
活跃值: (1693)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
5
这里forgot大侠好像分析过
2009-4-12 14:35
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习了  
2009-4-25 23:19
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你那地址错误的打不开
2009-4-25 23:33
0
雪    币: 716
活跃值: (162)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
8
恭喜楼主有所得
2009-4-26 10:25
0
游客
登录 | 注册 方可回帖
返回
//