【破解作者】 SYSCOM
【使用工具】 Ollydbg1.10, LordPE,ImportREC1.65,PEid 0.93
【破解平台】 Windows XP SP1
【软件名称】 BetterJPEG 1, 4, 4, 0
【下载地址】
http://www.betterjpeg.com/
【软件简介】 Edit JPEG photos
【加壳方式】 ASProtect SKE 2.X
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
(1) 用ollydbg 载入BetterJPEG.exe ,设置忽略所有异常。
在命令栏输入
BP GetVersion ,按 F9,看 STACK 返回 431EE4 ,在按 ALT+F9
返回,主程式 ,往上看.....不远地方
431EB8-PUSH EBP <======= OEP 进入点
431EB9-MOV EBP,ESP
431EBB-PUSH -1
.....
.....
(2)修正 Import Table and .CODE 写入补丁 PATCH(1)
先修正 9F4387-PUSH 9F43A4==>PUSH PATCH(1)+0x29 Offset Address
//********************** Start of Code in Object BinaryCode **************
:00000000 mov edx, 00401000 ;主程式 Start address
:00000005 cmp byte ptr [edx], E8 ;判断是否为 call 指令
:00000008 jne 0000001E
:0000000A mov eax, dword ptr [edx+01]
:0000000D add eax, edx
:0000000F add eax, 00000005
:00000014 cmp eax, 00CD0000 ;判断是否为 call API 加密,进入点
:00000019 jne 0000001E
:0000001B pushad ;保存所有暂存器
:0000001C jmp edx
:0000001E inc edx
:0000001F cmp edx, 00461000 ;主程式 end address
:00000025 jbe 00000005
:00000027 jmp 00000027 ;PATCH END
:00000029 mov ecx, 00461000 ;IAT start address (解码返回进入点)
:0000002E mov edx, dword ptr [ebp-0C]
:00000031 cmp dword ptr [ecx], edx
:00000033 jne 00000052
:00000035 mov dword ptr [00460800], ecx ;暂存 Import Address
:0000003B add esp, 0000023C
:00000041 popad ;取回所有暂存器
:00000042 mov ebx, dword ptr [00460800] ;取出 Import Address
:00000048 mov dword ptr [edx+02], ebx ;修正 Import Address
:0000004B mov word ptr [edx], 15FF ;修正 CALL
:00000050 jmp 0000001E
:00000052 add ecx, 00000004
:00000055 cmp ecx, 004616AC ;IAT End address
:0000005B jl 00000031
:0000005D jmp 0000005D
(3)写入补丁 PATCH(2)
//********************** Start of Code in Object BinaryCode **************
:00000000 mov edx, 00401000 ;主程式 Start address
:00000005 cmp byte ptr [edx], E8 ;判断是否为 call 指令
:00000008 jne 00000030
:0000000A mov eax, dword ptr [edx+01]
:0000000D add eax, edx
:0000000F add eax, 00000005
:00000014 cmp eax, 00401000 ;判断是否为 > 401000
:00000019 jb 00000030
:0000001B cmp eax, 00461000 ;判断是否为 < 461000
:00000020 ja 00000030
:00000022 mov bx, word ptr [eax]
:00000025 cmp bx, 15FF ;判断是否为 call 指令
:0000002A jne 00000030
:0000002C mov [eax+01], 25 ;修正 CALL =>JMP
:00000030 inc edx
:00000031 cmp edx, 00461000 ;主程式 End address
:00000037 jne 00000005
:00000039 jmp 00000039
(4) PATCH 完后,Dump BetterJPEG_dump.exe
(5)run BetterJPEG.exe 在用 ImportREC 抓出 Import
并修复 kernel32,中一个无效指针,改为 GetProcAddress
再修正,RestoreLastError ==>SetLastError (98/XP/NT4/2003 相容)
(6)使用 lordPE DUMP 变形程式,MEMORY 区块
并附加在 BetterJPEG_dump.exe,的后面
ADDRESS: SIZE SET
-----------------------------------
9D0000 32000 RWE
A64000 10000 RWE
C80000 1000 RWE
D10000 1000 RWE
D30000 2000 RWE
D40000 2000 RWE
D50000 1000 RWE
D60000 1000 RWE
-----------------------------------
(7)修正 Route CHECK
9F70CE-MOV EAX,[EAX+34] => 9F70CE-NOP
9F70D1-CALL EAX => 9F70CF-NOP
9FD0D3-SUB [EBP+C],EAX => 9F70D0-MOV EAX,[ESP+58]
9FD0D6-MOV EAX,[ENP+C] => 9F70D4-SUB EAX,5
(9)OK->TEST->RUN BetterJPEG_dump.exe
附件:betterjpeg.part1.rar
附件:betterjpeg.part2.rar
[课程]Android-CTF解题方法汇总!