手工脱壳 eXPressor1.8
本帖最后由 estelle 于 2010-1-30 14:25 编辑工具平台:Vsitasp2、OllyDBG、Petool 、ImpREC1.7
设置SOD全选
断点 VirtualProtectEx , F9 运行
75FF1DC3 >8BFF MOV EDI , EDI
75FF1DC5 55 PUSH EBP
75FF1DC6 8BEC MOV EBP , ESP
75FF1DC8 FF75 14 PUSH DWORD PTR
75FF1DCB FF75 10 PUSH DWORD PTR
75FF1DCE FF75 0C PUSH DWORD PTR
75FF1DD1 FF75 08 PUSH DWORD PTR
75FF1DD4 6A FF PUSH 0XFF
75FF1DD6 E8 FFBD0200 CALL 0X7601DBDA ; kernel32.VirtualProtectEx
75FF1DDB 5D POP EBP
75FF1DDC C2 1000 RETN 0X0010
禁用断点VirtualProtectEx
搜索 特征码 不多解释了 看前辈的教程吧 这里就是所谓的魔幻跳转
E8 ?? ?? ?? ?? 83 C4 04 85 C0 0F 85
00A12EA5 E8 8FEDFFFF CALL 0X00A11C39
00A12EAA 83C4 04 ADD ESP , 0X04
00A12EAD 85C0 TEST EAX , EAX
00A12EAF 0F85 87000000 JNE 0X00A12F3C //魔幻跳转
C6 00 E8 8B 45 D4 40 89 45 D0 50 E8
00A132F3 C600 E8 MOV BYTE PTR , 0XE8
00A132F6 8B45 D4 MOV EAX , DWORD PTR
00A132F9 40 INC EAX
00A132FA 8945 D0 MOV DWORD PTR , EAX
00A132FD 50 PUSH EAX
00A132FE E8 03000000 CALL 0X00A13306
00A13303 01EB ADD EBX , EBP
00A13305 0B8B 04240FB6 OR ECX , DWORD PTR
00A1330B 0001 ADD BYTE PTR , AL
00A1330D 04 24 ADD AL , 0X24
00A1330F C3 RET
分别在 00A12EAF ' 00A132F3 ' 2处下F2断点
程序中断在
00A12EA5 E8 8FEDFFFF CALL 0X00A11C39
00A12EAA 83C4 04 ADD ESP , 0X04
00A12EAD 85C0 TEST EAX , EAX
00A12EAF 0F85 87000000 JNE 0X00A12F3C//中断在此处
修改为 Jmp 0X00A12F3C
恢复VirtualProtectEx 断点F9 运行 再次中断
75FF1DC3 >8BFF MOV EDI , EDI
75FF1DC5 55 PUSH EBP
75FF1DC6 8BEC MOV EBP , ESP
75FF1DC8 FF75 14 PUSH DWORD PTR
75FF1DCB FF75 10 PUSH DWORD PTR
75FF1DCE FF75 0C PUSH DWORD PTR
75FF1DD1 FF75 08 PUSH DWORD PTR
75FF1DD4 6A FF PUSH 0XFF
75FF1DD6 E8 FFBD0200 CALL 0X7601DBDA ; kernel32.VirtualProtectEx
75FF1DDB 5D POP EBP
75FF1DDC C2 1000 RETN 0X0010
注意堆栈窗口
0012F66C FFFFFFFF|hProcess = FFFFFFFF
0012F670 004CD148|Address = eXPresso.004CD148 右键转存到数据窗口
0012F674 00000004|Size = 4
0012F678 00000040|NewProtect = PAGE_EXECUTE_READWRITE
0012F67C 0012FD28\pOldProtect = 0012FD28
004CD148000FD5CA收.
004CD14C000FD5D6终.
004CD150000FD5E8枵.
004CD154000FD5FE.
004CD158000FD614?.
004CD15C000FD62C,?.
004CD160000FD63E>?.
删除断点 VirtualProtectExF9运行几次 程序中断 00A12EAF
004CD1487603A411?v kernel32.lstrcmpW
004CD14C76043BCE?v kernel32.GlobalFindAtomA
004CD1507607AEC7钱v kernel32.GlobalGetAtomNameA
004CD1547603B27E~?v kernel32.GetModuleFileNameW
004CD15876039414?v kernel32.InterlockedDecrement
004CD15C76037F8F?v kernel32.GetThreadLocale
iat 正确的解密出来了 ,那就取消断点00A12EAF F9运行 程序中断在
00A132F3 C600 E8 MOV BYTE PTR , 0XE8//中断在这里
00A132F6 8B45 D4 MOV EAX , DWORD PTR
00A132F9 40 INC EAX
00A132FA 8945 D0 MOV DWORD PTR , EAX
00A132FD 50 PUSH EAX
查看数据窗口 发现绝大多数的iat 都解密出来了 但是还有2个函数没有解密出来
004CD31C7603CCDB厶v kernel32.MultiByteToWideChar
004CD32000A11905? //1处
004CD3247603C905?v kernel32.GetCurrentProcess
004CD37C760122BE?v kernel32.CreateFileMappingA
004CD380760368F0餳v kernel32.MapViewOfFile
004CD3847603AD55U?v kernel32.VirtualAlloc
004CD38800A118B8?? //2 处
004CD38C7603A9C1俩v kernel32.WriteFile
004CD39076038BFB麐v kernel32.IsBadReadPtr
004CD3947603A995暕v kernel32.UnmapViewOfFile
菜鸟没啥办法只能重复操作 当解密到
004CD31C7603CCDB厶v kernel32.MultiByteToWideChar
恢复VirtualProtectEx 断点F9 运行 F8 继续跟踪
01742E30 /75 2C JNE 0X01742E5E //修改成JMP 0X01742E5E
01742E32 |E8 03000000 CALL 0X01742E3A
01742E37 |EB 02 JMP 0X01742E3B
01742E39 |F7C3 C745FC05 TEST EBX , 0X05FC45C7
01742E3F |197401 EB SBB DWORD PTR , ESI
01742E43 |01BB 6A048D45 ADD DWORD PTR , EDI
01742E49 |FC CLD
发现 004CD320iat 已经正确的解密出来
004CD31C7603CCDB厶v kernel32.MultiByteToWideChar
004CD3207603903B;?v kernel32.GetProcAddress
004CD3247603C905?v kernel32.GetCurrentProcess
004CD3287601C5ACv kernel32.GetVersion
004CD32C7603D006?v kernel32.GetCurrentThread
当ait 解密到 004CD3847603AD55U?v kernel32.VirtualAlloc 继续跟踪
017451E7 /74 27 JE 0X01BE5210改成跳转
0174525A /0F85 9C000000 JNE 0X01BE52FC 改成跳转
发现 004CD388iat 已经正确的解密出来
004CD3887603AE8D嵁v kernel32.CloseHandle
017432F3 下断点F9运行 所有的iat 都解密完毕现在把iat 会写到text段查看iat 的开始
004CCFFC00000000....
抄袭某牛的一段脚本
var iatadd
var iattx
var begin
mov begin,eip
start:
mov iatadd,
mov iattx,eax
ESTO
cmp eip,begin
jne end
mov ,15ff
find 004ccffc,iatadd
mov iatadd,$RESULT
add iattx,2
mov ,iatadd
jmp start
end:
MSG "ok"
004A4225 E8 88C20000 CALL 0X004B04B2 ; eXPresso.004B04B2
004A422A^ E9 16FEFFFF JMP 0X004A4045 ; eXPresso.004A4045
在程序4A4225处下段 程序运行出现nag界面点进去 程序中断在OEPpetool 完全转存 ImpREC1.7
修复IAT ,运行测试 OK 。附件脱壳后的文件
附上去掉nag
004ADB0D 83E0 01 AND EAX,1 //mov al,1
004016B7 F705 14485000 0>TEST DWORD PTR DS:,4000000
多次检测 所以修改 【504814】 =4000000
00414CC4 |90 NOP//原 call eax
00414CC5 |90 NOP
00414EDF 68 BCFD4C00 PUSH 4CFDBC ; Estelle //ps的用户名
0044BBA0 /75 2E JNZ SHORT 0044BBD0 ; Unpack.0044BBD0 //jmp 0044BBD0
0044BBA2 |68 C4694D00 PUSH 4D69C4 ; Unregistered version of eXPressor
0044BBA7 |8D8424 A8020000 LEA EAX,DWORD PTR SS:
0044BBAE |6A 40 PUSH 40
0044BBB0 |50 PUSH EAX
0044BBB1 |E8 04430500 CALL 0049FEBA ; Unpack.0049FEBA
0044BBB6 |68 30694D00 PUSH 4D6930 ; This program was protected by an Unregistered version of eXPressor - Software Protection System!\r\nThis software is not licensed for distribution!
0044BBBB |8D8C24 F4020000 LEA ECX,DWORD PTR SS:
0044BBC2 |68 00020000 PUSH 200
0044BBC7 |51 PUSH ECX
0044BBC8 |E8 ED420500 CALL 0049FEBA ; Unpack.0049FEBA
0044BBCD |83C4 18 ADD ESP,18
0044BBD0 \F78424 3C020000>TEST DWORD PTR SS:,80000000 感谢凉水哥来吾爱破解发布作品. 難得見到 estelle 大俠出手.
漂亮! 感谢版主管理 加分和 评价菜鸟只是继续完成某牛的下半部分罢了 没啥技术含量 :lol彪悍的教程 很不错的教程,支持一下lz大牛~~ 很感谢楼主的手工脱壳的教程. 谢谢楼主的教程 ,好好学习 回复 1# estelle
讨厌,又是脚本,俺们这种菜鸟不会咋办 :)eee呵呵 我也学着看脚本吧