苏紫方璇 发表于 2024-1-30 15:48

请编写DLL注入后Patch掉自校验

本帖最后由 苏紫方璇 于 2024-2-1 21:22 编辑

zp1.4.9设置只选:校验文件。

下VirtualAlloc和MapViewOfFile断点,运行程序,在VirtualAlloc下断下,程序申请的内存为00AE0000

取消VirtualAlloc,运行,这时断在MapViewOfFile处,返回地址00D50000

再取消MapViewOfFile断点

下断 hr eax,运行程序,在断下位置的段尾ret处下断,之后F7到达这里:

00B06530    3B48 46         cmp ecx,dword ptr ds:

这里是校验值比较,可以修改使其相同而跳过自校验,先不修改,继续向下走,

到达目标位置:
00B0B8CB^\0F84 F58AFFFF   je 00B043C6                           ; 目标位置

手工修改为jne就跳过自校验了。

偏移值:00B0B8CB - 00AE0000 = 0x2B8CB

实现写一个DLL修改此处00B0B8CB的jz为jne,提供C++源码。

因为网络问题,图片没有上传成功,和程序一起打包:
https://www.123pan.com/s/YL29-nyyOh.html

少年持剑 发表于 2024-1-30 15:48

朱朱你堕落了 发表于 2024-1-30 19:08
少侠,zp使用了MapViewOfFile函数,你根据他这个函数特性HOOK很巧妙,但是如果这不是ZP壳,那么这个HOOK ...

第一种比较通用的方法就是在VirtualAlloc 获取地址之后,在je 跳转位置下个硬件执行断点或写入断点,添加VEH来接受异常,修改跳转。
第二种的话你调试器定位它je 代码被写入位置,在0x004BC4D1 位置movsb 会写入代码,你也可以hook这里。如果你观察movsb 前后的代码可以看到 原来的代码是被压缩存储在exe文件里面,你分析压缩算法,直接修改exe文件里面的值也行

少年持剑 发表于 2024-1-30 16:38

https://www.123pan.com/s/NkeHjv-wBX0H.html

无闻无问 发表于 2024-1-30 16:48

苏紫方璇版主大佬也悬赏?

苏紫方璇 发表于 2024-1-30 18:13

无闻无问 发表于 2024-1-30 16:48
苏紫方璇版主大佬也悬赏?

那必须的呀,不懂就问呗,最近被某人拉进脱壳深坑,一脸懵逼中

董督秀 发表于 2024-1-30 18:35

本帖最后由 董督秀 于 2024-1-30 18:36 编辑

{:1_937:} 佩服,一楼大佬的代码简洁而高效。自己也尝试过其他写法,感觉很复杂。

朱朱你堕落了 发表于 2024-1-30 19:08

本帖最后由 朱朱你堕落了 于 2024-1-30 19:43 编辑

少年持剑 发表于 2024-1-30 16:38
https://www.123pan.com/s/NkeHjv-wBX0H.html
少侠,zp使用了MapViewOfFile函数,你根据他这个函数特性HOOK很巧妙,但是如果这不是ZP壳,没有使用MapViewOfFile函数,那么这个HOOK位置如何找?怎么判断解码?
或这么说吧,如果在本例中你可以HOOK VirtualAlloc,但不HOOK MapViewOfFile,HOOK位置找哪里,代码怎么写?

bester 发表于 2024-1-30 20:38

MapViewOfFile 段尾retn处下断,获得eax的值,再进行hr eax,运行断下的这个位置,也就是当前eip,这个值加上0x19CA6,就到了je的位置,我不知道是不是个例,反正我电脑上是这样可以算出来,接下来的事情我跟一楼想法差不多 veh解决

朱朱你堕落了 发表于 2024-1-31 11:44

bester 发表于 2024-1-30 20:38
MapViewOfFile 段尾retn处下断,获得eax的值,再进行hr eax,运行断下的这个位置,也就是当前eip,这个值加上0x1 ...

兄弟你可以试试,并不容易实现,很多坑的。

cndml 发表于 2024-1-31 18:24

明明可以直接在文件里修改校验和,静态修改可以,加载进内存后修改更可以,随便hook一个系统函数就能实现。你dll注入后,要判断解码完成,要计算动态地址,不嫌麻烦吗?破解就是要用最简单的技术,达到一剑封喉的效果。
页: [1] 2
查看完整版本: 请编写DLL注入后Patch掉自校验