crack流程:
0.找到 GetModuleHandleA 和 GetProcAddress 函数的ptr指针
.data1:10DA723C ?? ?? ?? ?? GetModuleHandleA dd ?
.data1:10DA722C ?? ?? ?? ?? GetProcAddress dd ?
记为 (***a)DA723C (***b)DA722C
1.找到如下代码片段(交叉引用 unknown_libname_125 (call j__free) ; Microsoft VisualC 2-14/net runtime 可找到)
.text1:10CEF47F 50 push eax
.text1:10CEF480 68 D0 BF D2 10 push offset sub_10D2BFD0
.text1:10CEF485 68 80 6F D0 10 push offset sub_10D06F80
.text1:10CEF48A 68 20 6F D0 10 push offset sub_10D06F20
.text1:10CEF48F 68 40 6E D0 10 push offset sub_10D06E40
.text1:10CEF494 68 30 9E D2 10 push offset sub_10D29E30
.text1:10CEF499 68 30 F1 CE 10 push offset sub_10CEF130
.text1:10CEF49E 68 B0 A1 D2 10 push offset sub_10D2A1B0
.text1:10CEF4A3 68 80 BF D2 10 push offset sub_10D2BF80
.text1:10CEF4A8 68 90 BD D2 10 push offset sub_10D2BD90 <<<
.text1:10CEF4AD 68 90 B9 D2 10 push offset sub_10D2B990
.text1:10CEF4B2 68 30 B9 D2 10 push offset sub_10D2B930
.text1:10CEF4B7 68 10 B9 D2 10 push offset unknown_libname_125 ; Microsoft VisualC 2-14/net runtime
.text1:10CEF4BC 68 40 B5 D2 10 push offset sub_10D2B540
.text1:10CEF4C1 A1 C0 F3 DB 10 mov eax, ds:hInstance
.text1:10CEF4C6 50 push eax
.text1:10CEF4C7 FF 55 C4 call [ebp+var_3C]
2.观察 sub_10D2BD90 这个函数,记为 (***c)10D2BD90,并减去基地址10000000,记为(***d)D2BD90
观察 sub_10D2BD90 偏移地址 10CEF4A8,算出 10CEF4A9 的文件偏移,记为(***e)1E34A9
3.找到如下 IMAGE_SECTION_HEADER (紧随 .text1 (rva _DllMain@12) 后面)
HEADER:100002F0 ; IMAGE_SECTION_HEADER
HEADER:100002F0 2E 61 64 61 74 61 00 00 db '.adata',0,0 ; Name
HEADER:100002F8 00 00 01 00 dd 10000h ; Virtual size
HEADER:100002FC 00 70 D9 00 dd rva sub_10D97000 ; Virtual address
HEADER:10000300 00 D0 00 00 dd 0D000h ; Size of raw data
HEADER:10000304 00 F0 27 00 dd 27F000h ; Pointer to raw data
HEADER:10000308 00 00 00 00 dd 0 ; Pointer to relocations
HEADER:1000030C 00 00 00 00 dd 0 ; Pointer to line numbers
HEADER:10000310 00 00 dw 0 ; Number of relocations
HEADER:10000312 00 00 dw 0 ; Number of linenumbers
HEADER:10000314 20 00 00 60 dd 60000020h ; Characteristics
观察 dd rva sub_10D97000 和 dd 27F000h 记为
(***f)10D97000 (***g)D97000 (***h)27F000
使用上述记录的
(***a)DA723C
(***b)DA722C
(***c)10D2BD90
(***d)D2BD90
(***e)1E34A9
(***f)10D97000
(***g)D97000
(***h)27F000
按结构
a b c d
01 g e h 0x2200 00
构造 0x20 长度的数据如下
记为(***x)
3C 72 DA 00 2C 72 DA 00 90 BD D2 10 90 BD D2 00
01 00 70 D9 00 A9 34 1E 00 00 F0 27 00 00 22 00
16进制编辑器打开原始 VA_X.dll
跳转到文件偏移 (***h)27F000,Ctrl+B 粘贴 code.bin 的数据
跳转到 (***h)+1E50,Ctrl+B 粘贴 (***x) 的数据
跳转到文件偏移 (***e)1E34A9,修改4字节为 (***f)10D97000 也就是 00 70 D9 10
保存 VA_X.dll
下面是对 10.9.2366.0 的实操,基地址 1ED00000
0.找到
.data1:1FB8B23C ?? ?? ?? ?? GetModuleHandleA dd ? ; DATA XREF: sub_1FAD3140+44F↑r
.data1:1FB8B22C ?? ?? ?? ?? GetProcAddress dd ? ; DATA XREF: .text1:1FAD4368↑r
记为 (***a)3C B2 E8 00 (***b)2C B2 E8 00
1.找到
.text1:1FAD34A3 68 80 FF B0 1F push offset sub_1FB0FF80
.text1:1FAD34A8 68 90 FD B0 1F push offset sub_1FB0FD90 <<<
.text1:1FAD34AD 68 90 F9 B0 1F push offset sub_1FB0F990
.text1:1FAD34B2 68 30 F9 B0 1F push offset sub_1FB0F930
.text1:1FAD34B7 68 10 F9 B0 1F push offset unknown_libname_125 ; Microsoft VisualC 2-14/net runtime
.text1:1FAD34BC 68 40 F5 B0 1F push offset sub_1FB0F540
.text1:1FAD34C1 A1 C0 33 BA 1F mov eax, ds:hInstance
.text1:1FAD34C6 50 push eax
.text1:1FAD34C7 FF 55 C4 call [ebp+var_3C]
2.记为 (***c)90 FD B0 1F (***d) 90 FD E0 00 (***e) A9 F4 1E 00
3.找到
HEADER:1ED003B8 ; IMAGE_SECTION_HEADER
HEADER:1ED003B8 2E 74 65 78 74 31 00 00 db '.text1',0,0 ; Name
HEADER:1ED003C0 00 00 0B 00 dd 0B0000h ; Virtual size
HEADER:1ED003C4 00 B0 DC 00 dd rva _DllMain@12 ; Virtual address
HEADER:1ED003C8 00 40 0A 00 dd 0A4000h ; Size of raw data
HEADER:1ED003CC 00 70 1E 00 dd 1E7000h ; Pointer to raw data
HEADER:1ED003D0 00 00 00 00 dd 0 ; Pointer to relocations
HEADER:1ED003D4 00 00 00 00 dd 0 ; Pointer to line numbers
HEADER:1ED003D8 00 00 dw 0 ; Number of relocations
HEADER:1ED003DA 00 00 dw 0 ; Number of linenumbers
HEADER:1ED003DC 20 00 00 60 dd 60000020h ; Characteristics
HEADER:1ED003E0 ; IMAGE_SECTION_HEADER
HEADER:1ED003E0 2E 61 64 61 74 61 00 00 db '.adata',0,0 ; Name
HEADER:1ED003E8 00 00 01 00 dd 10000h ; Virtual size
HEADER:1ED003EC 00 B0 E7 00 dd rva dword_1FB7B000 ; Virtual address
HEADER:1ED003F0 00 D0 00 00 dd 0D000h ; Size of raw data
HEADER:1ED003F4 00 B0 28 00 dd 28B000h ; Pointer to raw data
HEADER:1ED003F8 00 00 00 00 dd 0 ; Pointer to relocations
HEADER:1ED003FC 00 00 00 00 dd 0 ; Pointer to line numbers
HEADER:1ED00400 00 00 dw 0 ; Number of relocations
HEADER:1ED00402 00 00 dw 0 ; Number of linenumbers
HEADER:1ED00404 20 00 00 60 dd 60000020h ; Characteristics
(***f) 00 B0 B7 1F (***g)00 B0 E7 00 (***h)00 B0 28 00
按结构
a b c d
01 g e h 0x2200 00
构造 0x20 长度的数据如下
记为(***x)
3C B2 E8 00 2C B2 E8 00 90 FD B0 1F 90 FD E0 00
01 00 B0 E7 00 A9 F4 1E 00 00 B0 28 00 00 22 00
16进制编辑器打开原始 VA_X.dll
跳转到文件偏移 (***h)28B000,Ctrl+B 粘贴 code.bin 的数据
跳转到 +1E50,Ctrl+B 粘贴 (***x) 的数据
跳转到文件偏移 (***e)1EF4A9,修改4字节为 (***f) 00 B0 B7 1F
保存 VA_X.dll
试了一下,神了~