飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 1994|回复: 2

请教各位大侠:

[复制链接]

该用户从未签到

发表于 2006-1-15 20:53:38 | 显示全部楼层 |阅读模式
请教各位大侠:
tElock 0.96 -> tE! 究竟如何脱?
PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2020-4-10 17:02
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2006-1-16 22:33:22 | 显示全部楼层
    二次内存断点!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-2-12 10:32:56 | 显示全部楼层
    原帖由 jdmmm1 于 2006-1-15 12:53 发表
    请教各位大侠:
    tElock 0.96 -> tE! 究竟如何脱?

    软件后用Fi测Note_tElock.exe的壳为tElock 0.98b1 -> tE!
    手动脱壳建议大家用Ollydbg,工作平台Win2000,WinXp,Win9x不推荐。
    手动脱壳时,用Olldbg载入程序,脱壳程序里面会有有好多循环。对付循环时,只能让程序往前运行,基本不能让它往回跳,要想法跳出循环圈。不要用Peid查入口,单步跟踪,提高手动找入口能力。
    我们把Od中的选项-调试选项-异常选项卡中
    除了忽略在KERNEL32 中的内存访问异常打勾,其余一个勾都不打,请检查自己的Od设置。

    用OD载入程序后。
    确定一个入口警告,Od提示程序加壳,选不继续分析。
    0040DBD6 >^\E9 25E4FFFF JMP Note_tEl.0040C000
    0040DBDB 0000 ADD BYTE PTR DS:[EAX],AL
    0040DBDD 0038 ADD BYTE PTR DS:[EAX],BH
    0040DBDF A4 MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
    0040DBE0 54 PUSH ESP
    0040DBE1 47 INC EDI
    0040DBE2 1E PUSH DS
    0040DBE3 DC00 FADD QWORD PTR DS:[EAX]
    0040DBE5 0000 ADD BYTE PTR DS:[EAX],AL
    0040DBE7 0000 ADD BYTE PTR DS:[EAX],AL
    0040DBE9 0000 ADD BYTE PTR DS:[EAX],AL
    0040DBEB 0000 ADD BYTE PTR DS:[EAX],AL
    0040DBED 003E ADD BYTE PTR DS:[ESI],BH
    0040DBEF DC00 FADD QWORD PTR DS:[EAX]
    0040DBF1 002E ADD BYTE PTR DS:[ESI],CH
    0040DBF3 DC00 FADD QWORD PTR DS:[EAX]
    .............................................................
    和我们以前看到的结构完全不同。
    先F9运行看看。

    0040DA1D FF07 INC DWORD PTR DS:[EDI] 单步异常。
    0040DA1F ^ EB E8 JMP SHORT Note_tEl.0040DA09
    0040DA21 EB 03 JMP SHORT Note_tEl.0040DA26
    0040DA23 FFEB JMP FAR EBX ; 非法使用寄存器

    异常后全部Shift+F9继续运行。

    0040DA74 ^\73 DC JNB SHORT Note_tEl.0040DA52
    0040DA76 CD 20 INT 20
    0040DA78 64:67:8F06 0000 POP DWORD PTR FS:[0]

    单步异常。

    0040C08D 90 NOP
    0040C08E 8BC0 MOV EAX,EAX

    int3异常。

    0040C090 F9 STC
    0040C091 90 NOP

    单步异常。

    0040C099 F8 CLC
    0040C09A 90 NOP

    单步异常。

    0040C09E FC CLD
    0040C09F 90 NOP

    单步异常。

    0040C0A3 90 NOP
    0040C0A4 90 NOP

    单步异常。

    0040C0A7 F7F3 DIV EBX
    0040C0A9 64:67:8F06 0000 POP DWORD PTR FS:[0]

    整数被0除。

    0040C6A8 8DC0 LEA EAX,EAX ; 非法使用寄存器
    0040C6AA 74 03 JE SHORT Note_tEl.0040C6AF

    非法的指令。

    0040CAA1 66:F7F3 DIV BX
    0040CAA4 0F85 5B010000 JNZ Note_tEl.0040CC05

    整数被0除。

    0040CAE4 F8 CLC
    0040CAE5 0F83 1A010000 JNB Note_tEl.0040CC05

    单步异常。

    0040CB28 90 NOP
    0040CB29 E9 D7000000 JMP Note_tEl.0040CC05

    int3中断

    0040CB67 F7F3 DIV EBX
    0040CB69 85D2 TEST EDX,EDX

    整数被0除。

    0040CBA6 CD 68 INT 68
    0040CBA8 66:05 7B0C ADD AX,0C7B

    内存异常。

    0040CBF1 90 NOP
    0040CBF2 66:81FE 4746 CMP SI,4647

    int3中断

    0040CE0D FF01 INC DWORD PTR DS:[ECX]
    0040CE0F ^ EB E8 JMP SHORT Note_tEl.0040CDF9

    单步异常。

    0040CE49 ^\73 DC JNB SHORT Note_tEl.0040CE27
    0040CE4B CD 20 INT 20

    单步异常。

    0040D6F1 8DC0 LEA EAX,EAX ; 非法使用寄存器
    0040D6F3 EB 01 JMP SHORT Note_tEl.0040D6F6

    非法的指令。

    0040D7E1 F7F3 DIV EBX
    0040D7E3 ^ EB E8 JMP SHORT Note_tEl.0040D7CD

    单步异常。

    0040D817 ^\73 DC JNB SHORT Note_tEl.0040D7F5
    0040D819 CD 20 INT 20

    单步异常
    过了这里后,再F9软件就运行了。
    经过了20个系统异常,然后程序运行,这些单步异常是防止我们一步步跟踪程序,即F8,F7,F4等,Int3中断是检测调试器用的,仅在Win9x系统中有效,2000/XP就会出现断点异常,其它的异常主要是干扰调试。这一系列的异常虽然干扰我们调试,但也给我们指明了一条通路,就是Shift+F9略过所有异常,然后找到最后一处异常,再它的恢复异常处下断点,跟踪到脱壳入口点。
    好我们Ctrl+F2重新来过,到

    0040D817 ^\73 DC JNB SHORT Note_tEl.0040D7F5
    0040D819 CD 20 INT 20

    停下,看堆栈里的代码。

    0012FF58 0012FFE0 指针到下一个 SEH 记录
    0012FF5C 0040D7FB SE 句柄 呵,这里表示Od的最后一个异常处理出口就是0040D7FB,会在0040D7FB处的代码处继续正常运行。
    0012FF60 00000000
    0012FF64 00000000
    0012FF68 0012FBD4
    0012FF6C 0012FF80
    0012FF70 0040D7D2 返回到 Note_tEl.0040D7D2 来自 Note_tEl.0040D7D8
    0012FF74 77F79BB8 ntdll.77F79BB8

    哪我们就Ctrl+G,填入0040D7FB,回车,F2下断点Od提示是可以的中断点,点是忽略它,Shift+F9中断在这里。

    0040D7FB 8B6424 08 MOV ESP,DWORD PTR SS:[ESP+8] 然后F2取消断点。
    0040D7FF EB 1A JMP SHORT Note_tEl.0040D81B

    0040D81B 64:67:8F06 0000 POP DWORD PTR FS:[0] 呵,剩下的路没有Seh干扰,我们可以直达Oep处。
    0040D821 58 POP EAX
    0040D822 61 POPAD
    0040D823 85E4 TEST ESP,ESP
    0040D825 79 03 JNS SHORT Note_tEl.0040D82A 跳。

    0040D82A 48 DEC EAX 到这里
    0040D82B E8 00000000 CALL Note_tEl.0040D830 隔壁也Call,F7过。
    0040D830 EB 02 JMP SHORT Note_tEl.0040D834 跳。

    0040D834 98 CWDE 到这里
    0040D835 23C3 AND EAX,EBX
    0040D837 8B3C24 MOV EDI,DWORD PTR SS:[ESP]
    0040D83A 58 POP EAX
    0040D83B 81EF 9F144100 SUB EDI,41149F
    0040D841 EB 02 JMP SHORT Note_tEl.0040D845 跳。

    0040D845 48 DEC EAX 到这里
    0040D846 8BC4 MOV EAX,ESP
    0040D848 B8 9731BF0F MOV EAX,0FBF3197
    0040D84D 8BD8 MOV EBX,EAX
    0040D84F 81EB E71D7E0F SUB EBX,0F7E1DE7
    0040D855 EB 01 JMP SHORT Note_tEl.0040D858 跳。

    0040D858 1BC0 SBB EAX,EAX
    0040D85A 98 CWDE
    0040D85B 03DF ADD EBX,EDI
    0040D85D B8 18474D00 MOV EAX,4D4718
    0040D862 8BC8 MOV ECX,EAX
    0040D864 81E9 FB464D00 SUB ECX,4D46FB
    0040D86A EB 02 JMP SHORT Note_tEl.0040D86E 跳。

    0040D86E 68 4922F66E PUSH 6EF62249
    0040D873 5E POP ESI
    0040D874 85E4 TEST ESP,ESP
    0040D876 79 03 JNS SHORT Note_tEl.0040D87B 跳。

    0040D87B 13C2 ADC EAX,EDX ; ntdll.77F79BB8
    0040D87D F5 CMC
    0040D87E 6BF6 27 IMUL ESI,ESI,27
    0040D881 3133 XOR DWORD PTR DS:[EBX],ESI
    0040D883 C1C6 05 ROL ESI,5
    0040D886 F9 STC
    0040D887 83D6 3B ADC ESI,3B
    0040D88A 43 INC EBX
    0040D88B 43 INC EBX
    0040D88C 43 INC EBX
    0040D88D 43 INC EBX
    0040D88E EB 03 JMP SHORT Note_tEl.0040D893 跳。

    0040D893 90 NOP 到这里
    0040D894 0BC1 OR EAX,ECX
    0040D896 B8 DFED3678 MOV EAX,7836EDDF
    0040D89B 03F0 ADD ESI,EAX
    0040D89D 0BE4 OR ESP,ESP
    0040D89F 75 01 JNZ SHORT Note_tEl.0040D8A2 跳。

    0040D8A2 F5 CMC
    0040D8A3 49 DEC ECX
    0040D8A4 F9 STC
    0040D8A5 72 02 JB SHORT Note_tEl.0040D8A9 跳。

    0040D8A9 90 NOP
    0040D8AA 1BC6 SBB EAX,ESI
    0040D8AC E8 0B000000 CALL Note_tEl.0040D8BC 变形Jmp,F7过

    0040D8BC 13C5 ADC EAX,EBP
    0040D8BE C3 RETN 好像一个跳转语句

    0040D8B1 F8 CLC 到这里。
    0040D8B2 2BC6 SUB EAX,ESI
    0040D8B4 E9 07000000 JMP Note_tEl.0040D8C0

    0040D8C0 83E8 91 SUB EAX,-6F 跳。
    0040D8C3 51 PUSH ECX
    0040D8C4 8BC9 MOV ECX,ECX

    0040D8C6 E3 03 JECXZ SHORT Note_tEl.0040D8CB
    0040D8C8 59 POP ECX
    0040D8C9 ^ EB B3 JMP SHORT Note_tEl.0040D87E 往回跳。
    0040D8CB 59 POP ECX F4下来。
    0040D8CC F9 STC
    0040D8CD 72 02 JB SHORT Note_tEl.0040D8D1 跳。
    0040D8CF CD 20 INT 20
    0040D8D1 33C0 XOR EAX,EAX
    0040D8D3 98 CWDE
    0040D8D4 61 POPAD
    0040D8D5 EB 01 JMP SHORT Note_tEl.0040D8D8 跳。

    0040D8D8 33C2 XOR EAX,EDX
    0040D8DA 48 DEC EAX
    0040D8DB C3 RETN

    0040D741 8B9D 82D34000 MOV EBX,DWORD PTR SS:[EBP+40D382]
    0040D747 33F6 XOR ESI,ESI
    0040D749 F7D3 NOT EBX
    0040D74B 0BF3 OR ESI,EBX
    0040D74D 75 08 JNZ SHORT Note_tEl.0040D757 跳。

    0040D757 039D 62D34000 ADD EBX,DWORD PTR SS:[EBP+40D362] ; Note_tEl.00400000 基址400000
    0040D75D 895C24 F0 MOV DWORD PTR SS:[ESP-10],EBX ; Note_tEl.004010CC 4010CC 记事本的Oep.
    0040D761 8DBD 84D24000 LEA EDI,DWORD PTR SS:[EBP+40D284]
    0040D767 33C0 XOR EAX,EAX
    0040D769 B9 9E030000 MOV ECX,39E
    0040D76E F3:AA REP STOS BYTE PTR ES:[EDI]
    0040D770 8DBD A2B64000 LEA EDI,DWORD PTR SS:[EBP+40B6A2]
    0040D776 B9 58170000 MOV ECX,1758
    0040D77B F3:AA REP STOS BYTE PTR ES:[EDI]
    0040D77D 66:AB STOS WORD PTR ES:[EDI]
    ............................................................ 这里省去一些代码,很简单的。
    0040D77F 8DBD A2B64000 LEA EDI,DWORD PTR SS:[EBP+40B6A2]
    0040D785 85F6 TEST ESI,ESI
    0040D787 75 08 JNZ SHORT Note_tEl.0040D791
    ............................................................
    0040D7B0 - FF6424 D0 JMP DWORD PTR SS:[ESP-30] ; Note_tEl.004010CC

    004010CC 55 PUSH EBP 跨段来到这里,我们再这里用Od的Dump插件直接脱壳。
    004010CD 8BEC MOV EBP,ESP
    004010CF 83EC 44 SUB ESP,44
    004010D2 56 PUSH ESI
    004010D3 FF15 E4634000 CALL DWORD PTR DS:[4063E4]
    004010D9 8BF0 MOV ESI,EAX
    004010DB 8A00 MOV AL,BYTE PTR DS:[EAX]
    004010DD 3C 22 CMP AL,22
    004010DF 75 1B JNZ SHORT Note_tEl.004010FC
    004010E1 56 PUSH ESI
    004010E2 FF15 F4644000 CALL DWORD PTR DS:[4064F4]
    004010E8 8BF0 MOV ESI,EAX
    004010EA 8A00 MOV AL,BYTE PTR DS:[EAX]
    004010EC 84C0 TEST AL,AL

    脱壳后发现程序不能运行,这时需要用Imprec修复引入函数表(Import Table)
    在Oep处填10CC,点IT自动搜索,然后点获输入信息,看到输入表有无效的,点显示无效按钮,再在无效的指针处点右键用追踪层次3(捕获标记)方式修复,还提示有一个未修复的指针,这是什么???这是Telock加密输入表放入的垃圾,让Imprec无法修复指针,很简单,这这个垃圾指针处点右键,选择剪切指针后,Imprec提示你可以修复脱壳文件了,修复脱壳文件,正常运行。

    测试几个Telock0.98加壳的文件,确认没修复的指针是垃圾指针,无法修复,只能剪切掉,修复后可以正常反汇编调试。
    第二次见识SEH,真多,你只要能从最后一个陷阱中出来就能顺利到达Oep处。修复引入表的事还是交给Imprec这个专业级的修复工具办,可以省不少事。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表