Harlan 发表于 2017-4-1 21:28

飘零3.0另类破解法以及不用字符串如何找到线程函数

本帖最后由 Harlan 于 2017-4-1 21:39 编辑

本人第一次发帖,难免有点小紧张,不过没关系 咱们交流技术 有什么不对的还望指出{:5_117:}   进入正题。我们都有这个程序的源码,我的逆向分析思路是以源码为基础进行的逆向。前面的步骤我就不讲了 大家应该都会,我们直接进入单击按钮事件之后开始说。上图

首先源码上按钮点击之后会启动线程,也就是说他是一个多线程的程序,学过编程的朋友都知道多线程会启动一个回调函数,所有的代码会在回调函数里执行,那么知道这个 我们就有思路了。
我中间可能忽略了很多细节,因为在恒大的教程里已经说的很清楚了,我就直接说我要说的重点。

看下面这个图,上面以及标注了,有一个线程地址,就是源码源码中的登录线程,我们直接Ctrl+G 输入40FF4F


然后我们进入下面的CALL进去后看看 是不是很熟悉啊 ,就是一开始恒大的教程里用字符串搜索到的那段代码,然后我们向下走来到这里,然后把那个CALL NOP掉 看下张图



这里的add 主要目的是为了堆栈平衡,但是我记得我改过一次 好像易语言的程序堆栈不平衡一样不会崩溃。来说说这个函数我为什么标记他是防破初始化是怎么看出来的,我相信肯定是很多朋友都想知道了 高手略过。 咱们对着源码看 首先源码上是传递3个参数,那么汇编上就是需要3个push 咱们可以看到这个函数的上面正好是3个push 因为易语言是C++编写的所有肯定是遵守c语言的调用约定,就是参数从右向左压栈,然后我们从汇编上看到的正好是离上面那个call最近的就是飘零取文件特征字,然后以此是密码 账号 正好和这个函数完全匹配,然后我们不用考虑直接NOP 我们不用进这个CALL跟他玩了 那么他的所有安装也就都失效了。


然后继续向下 来到重要的地方就是到源码所在的收费模式段,那个判断直接NOP然后进收费模式call

最重要的地方来了 ,我们对照的源码讲解

这一段只要的目的是与服务器交互,那么我们既然爆破他,他与服务器交互或者不交互对于我们来说根本所谓,因为他没有检测必须要与服务器交互或者服务器返回什么重要的东西,而且我们可以看到这个源码中最重要的部分就是那个判断为真的时里面那个全局变量的赋值,只要判断成立那么登录标志就赋值为1,我说到这里 我相信有很多小伙伴应该会明白我下一步要做啥了。
还记得我们在前面的图中的标记吗,大家应该也知道关键CALL的原理,那么我们最简单的方法就是仿照关键call的写法,进入call 直接对变量赋值返回.上图

就是这样 其实就是和关键call 中mov eax,1 意思一样。
这里赋值为1后 后面的代码就不用问了 他会直接启动起来那个窗口,因为后面的函数代码的条件我们满足了。
因为这个是个线程,所以我们直接回到一开始的那个主线程里,可以看到 他会判断这个全局变量是否是1,如果不是1直接结束,如果是1他会赋值为0
然后可以继续跟下去,至于那个函数驱动线程具体做了啥没有具体跟,只知道他的判断是真,然后执行了那个全局变量赋值为0。
这个全局变量赋值为0后 下一个函数就满足要求了 ,那么窗口就启动了。
我们只NOP了两处,一个retn 就实现了逆向,这里只是讲了一个思路 可能这个版本很落后了,但是这个方法肯定不会落后的。

这里为什么要retn 肯定很多人会说 下面写的retn 4是不错 下面是写的retn 4 但是我没有翻因为很长。但是怎么确定是retn 4呢。我来普及一下知识。
c语言的调用约定最常见的是两个 __cdecl__stdcall 这两个一个是外平栈一个是内平栈,这里的平栈就是与push相对的。
比如我们进函数之前push 一次 那么就是retn 4 因为push的值是一个DWORD易语言中应该叫整数型,就是四字节,所以是内平栈就是retn 4 如果是外平栈就是add esp,4
那么同理如果是push 两次 就是retn8三次就是retn 0xC


但是这个可能是易语言的内核的问题我上次改错了 我直接改retn居然没有崩溃{:5_128:}我就很尴尬了。。。。   具体了解 大家可以百度,先说到这里{:5_116:}!!
至于这个飘零3.0的源码以及软件是恒大课程第二期第六课的课件里哦!!!我就不上传了,免得浪费论坛空间!

因为小弟是第一次来咱们论坛,感觉不留个工具好像有点过意不去。大家在开虚拟机的时候肯定都知道 虚拟机需要启动5个服务,但是虚拟机关里 服务缺不会自己关,而且主要还影响电脑速度以及网速,反正我是有这感觉,我每次不关服务 我都感觉速度好慢,特此我写了一款软件 用c控制台写的,送给大家。 这工具会自动开启相关服务运行虚拟机主程序, 然后在不用虚拟机的时候可以关闭虚拟机全部服务以及托盘里的那个图标。。。。。。。。一定要把这个工具放到虚拟机同目录下运行哦!!如果这个工具有BUG私信我!

如果需要源码的可以给我留言。但是事先声明哦,是C语言代码哦 不是易语言的。。。。。


Shark恒 发表于 2017-4-1 21:54

加油加油,掌握原理,举一反三只非常重要的,支持Harlan。

如果不认真看教程,没学懂教程中讲到的原理,只是背一个操作过程的话,永远也不会举一反三。

Harlan 发表于 2017-4-2 08:45

多谢恒大支持!
虽然我是新人 但是我以后肯定会跟大家多多交流的。

SihayTse 发表于 2017-4-4 01:57

感觉都好叼的样子 萌新表示都看不懂

超级白 发表于 2017-4-4 06:32

完全看不懂了呢

Harlan 发表于 2017-4-4 09:00

其实恒大的教程里也说了,大家多学学编程, 逆向工程其实就是把编程的东西反过来找,原理的东西还是需要有一定的编程知识才能了解的

a6725666 发表于 2017-4-4 16:15

感谢楼主这么细心的教程,给人一种不一样的思路

Doctor 发表于 2017-4-4 18:56

一点一点的分析要好久啊

Harlan 发表于 2017-4-4 19:10

Doctor 发表于 2017-4-4 18:56
一点一点的分析要好久啊

这个3.0都有源码的其实只要分析源码就行了 源码分析完了看反汇编代码就容易多了

别管我了行 发表于 2022-4-21 02:19

页: [1] 2 3
查看完整版本: 飘零3.0另类逆向法以及不用字符串如何找到线程函数