好友
阅读权限20
听众
最后登录1970-1-1
|
本帖最后由 7369181cpj 于 2014-1-29 17:39 编辑
内容我讲的很详细了,可是最近总是不停的有人加QQ要源码,能教的都教了,又要这个。又要那个。只要有一个不能满足他。。。他就会说小气~索性将贴子隐藏了。如再有人 无理取闹,直接删除本贴
刚看到一个贴子 http://www.52pojie.cn/thread-233507-1-1.html 问关于易语言破解补丁的一些问题
下面我来说下自己的一些理解与经验。本人基础很差,一些专业术语都不懂,如果哪里讲错了,希望见谅~
以下内容,仅提供参考,不直接提供源码,如果你感觉对你有帮助,那看下去,如果感觉我讲的都是狗屁,那可以直接关掉本页面了
首先,说下,易语言,如何直接修改没加壳没运行的EXE文件
.版本 2
原始数据 = 读入文件 (编辑框_被修改程序.内容)
新的数据 = 字节集替换 (原始数据, 寻找字节集 (原始数据, { 53, 50, 112, 111, 106, 105, 101 }, ), 取文本长度 (到文本 ({ 53, 50, 112, 111, 106, 105, 101 })), { 57, 50, 112, 111, 106, 105, 101 })
以上数据呢。就是当 编辑框里面指向的EXE文件 内搜索 52pojie 替换成 92pojie 这种方法只适合没加壳的程序,所以在处理的时候要注意
第二内,是关于内部补丁的,其实内存补丁,也不是很难,如果 我们已经破坏的东西。比如说。点登陆按钮。直接进入界面,那样,补丁写法,一句代码就能实现,当然,我这里用到的模块
内存_写字节集 (进程句柄, 内存地址 , 十六进制到字节集 (“74”))
模块大家可以去易论坛,下草帽开源的, 这个命令不需要多解释吧。。进程句柄,要改的内存地址(整数型),后面是修改过的地址,当然,如果想做特征码,可以在前面加一个搜索内存的
内存_内存搜索 (进程句柄, 4194304, 2147483647, 十六进制到字节集 (“89 11 8A FD”), 内存地址)
第一个参数是句柄,第二是搜索的起始范围,第三个,是终止地址,第四个,是特征码,第五个,是保存到数组内
当然这只是改法。至于改之前是否加判断。。就由个人来定了。。比如说。你想在修改的前。先判断。数据是否完整加载。。可以判断,被修改处的原始数据
比如说以下代码
.判断开始 (内存地址1 = 十六进制到字节集 (“84”))
内存_写字节集 (进程句柄, 十六到十 (“0043c3eb”), 十六进制到字节集 (“85”))
下面来说下,启动时验证的程序。。这个也可以用于PUSH窗口
这样的程序就是在进程启动的时候就给他处理掉,我们用什么方法呢。。其实方法很多,可以用时钟监视进程。也可以使用线程。当然。我个人比较喜欢也经常用的。就是自己启动要破解的程序。。
进程_创建进程 (接收到的文件路径, , , 进程信息)
启动线程 (&处理线程, , )
这个命令,精易里有类似的。草帽里出有类似命令,可以去参考下,这样的话。再结合上面的判断 内存地址是否等于原如果,修改就可以了,线程是死循环,发现处理后,跳出循环~
这种方法,处理速度很快,PUSH窗口也会很爽,但有个问题。如果程序加了VMP。那这种方法就不能用了。因为VMP可能会加程序是否被破坏的,如被破坏。。提示损坏
所以,我们就要等他程序全部加载结束后再处理他。。。也就是要写一个DLL。启动他的时候注入进去。。。然后。HOOK CreateWindowExA
具体DLL内代码
.版本 2
.子程序 初始
HOOK_安装APIHOOK (“user32.dll”, “CreateWindowExA”, &检查, )
.子程序 退出
.子程序 检查, 整数型
.参数 扩展风格, 整数型
.参数 类名, 文本型, , 刚才注册的类名
.参数 窗口标题, 文本型
.参数 风格, 整数型
.参数 屏幕横坐标, 整数型
.参数 屏幕纵坐标, 整数型
.参数 宽度, 整数型
.参数 高度, 整数型
.参数 父窗口句柄, 整数型, , 没有就写0
.参数 菜单句柄, 整数型
.参数 模块句柄, 整数型
.参数 参数, 整数型
.局部变量 ab, 整数型
.判断开始 (十六到十 (“0043c3eb”), = 十六进制到字节集 (“85”))
内存_写字节集 (-1, 十六到十 (“0043c3eb”), 十六进制到字节集 (“84”))
HOOK_恢复APIHOOK (-1)
.默认
.判断结束
这样的话,即可在他启动第一窗体前,就KO掉他。。。。
另外说下,易语言,如何远程HOOK,不注入DLL的方法,这个方法试用于取注册码,修改程序获取时间
实际上,我们在OD里面,先可以测试操作,我这里以HOOK到期时间为例,别的妙用,大家自己举一反三
如下图 :
比如说 push 8 下面这个CALL是获取到期时间的。。那么,我们把这个CALL。CALL到我们的地址里面,我这里用SOD申请一块内存。
然后处理一下。让他返回我们定义下来的值,如里你不知道,也不懂CALL里的参数。那么,,你可以向下跟。。看看,到底哪个数据是 保存 时间的。。然后把这个时候,赋值成我们的就可以了
下面说写法。。
.版本 2
HOOK地址 = 申请内存_ (进程句柄, 1024)
内存_写字节集 (进程句柄, 到整数 (HOOK地址 + 128), 到字节集 (“863999999”)) ‘这个里面就是保存的到期时间了
JMP = { 232 } + 到字节集 (MakeJmp (十六到十 (“004f2b38”), HOOK地址))
HOOK数据 = { 184 } + 到字节集 (到整数 (HOOK地址 + 128)) + { 137, 69, 252, 194, 4, 0 }
内存_写字节集 (进程句柄, HOOK地址, HOOK数据)
内存_写字节集 (进程句柄, 十六到十 (“004f2b38”), JMP)
.版本 2
.子程序 MakeJmp, 整数型
.参数 当前地址, 整数型
.参数 目的地址, 整数型
返回 (目的地址 - 当前地址 - 5)
好了。。。本教程到此结束,,第一次写教程,写的很乱~~~~
|
免费评分
-
查看全部评分
|