手工xxoo Visual Assist X 笔记

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

试了一下,神了~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值