DXF诛仙辅Z【一款可可通杀无法解决的辅Z】
本帖最后由 天朝的梅花 于 2018-5-21 03:27 编辑俗话说的好授人以鱼不如授人以渔
可可通杀软件给了你一条做熟的鱼
而假设有一天一条生鱼摆在你面前,没人给你做鱼了,你不能说生吃了它吧? {:5_188:}
**** Hidden Message *****
然后返回到汇编窗口在堆栈的第一行右键
果不其然找到了传说中的标志位:1F
想办法做掉它喽{:5_121:}
在1F的位置右键找到修改然后改0
然后双击去除断点运行一哈
我 Ri 什么鬼? 关机睡觉{:5_188:}
既然有详细问题信息点开看下吧
程序里找一下吧
模块基址+异常偏移 = 00400000 + 00009dcd = 00409dcd
首先ALT+E找到程序的主模块双击进去
或者Ctrl+G 输入00401000 回车
然后再次Ctrl+G输入刚才我们算出的异常代码地址 回车
原来是个INT3暗桩
断首retn
没办法因为程序已经死了 刚才我们的分析必须重复上述所有步骤在它异常之前提前到达它的异常点
否则程序就死了无论怎么分析也没办法了。
ok重复刚才的步骤以后
在修改判断位1F之后不能直接运行了,因为知道结果会碰到暗桩导致程序假死
那么在修改判断位1F以后怎么办,这里因为VM要释放源汇编代码
所以需要时机
时机就是在调用系统函数:CreateWindowExA 的时候
【这个函数是用来创建一个具有扩展风格的层叠式窗口、弹出式窗口或子窗口】
也就是说在它弹出程序主窗口之前我们使它停止下来
然后找到刚才的异常地方把其retn掉
我们可以用在快捷命令窗口下:bp CreateWindowExA 这个命令让其断下
或者用工具API常用段点里找到这个断点
好了我们运行两次第一次在:LocalAlloc 这个函数断下
我们修改标志位1F以后继续下断:bp CreateWindowExA
然后在运行一次就断在了程序窗口弹出之前
我们Ctrl+G输入之前找到的错误地址【别忘了先回到程序领空也是就ALT+E然后找到主程序双击】
好了今天继续更新因为昨天发现这个东西并没有那么简单,而且它竟在我发完教程以后更新了我估摸着也许作者正在偷偷的偷窥我的教程?那我只能说一声抱歉了啊哈哈哈{:5_194:}
这玩意是个双重验证也就是说外层的验证只不过是一层壳而如果PJ了验证那层壳以后壳就会放出真正的FZ
而真真的FZ里还有一层验证我们之前所有的分析都是建立在验证壳上不管怎样想办法让验证释放真真的FZ才是我们的目的废话不多继续教程上次说了我们得提前到达int3暗桩的断首retn才能阻止程序奔溃
今天最新版更新以后我发现没有虚拟机检测了那么就更加方便我们了,不过他竟然把字符串给我混淆掉了妈的蛋,还好我们之前有存根先讲如果过int3断点吧我们载入最新版地址自己去下载:http://dnf-nb-zhuxian.cccpan.com/密码:6666
不懂这个断点含义的同学可以看上文
然后直接运行【因为没有虚拟机检测所以可以直接跑起来】
等程序抛出异常【这是一个暗桩,应该是作者自己写的一个检测OD的功能暗桩】
好的我们重新记下异常偏移地点
然后套用公式:基地址+异常偏移 = 错误汇编代码段基地址:00400000 + 异常偏移:0000d918 = 错误代码段:0040d918这里的基地址用AIT+E 然后查看当前我们调试程序的名称【也就是内部诛仙.vmp.exe】切记双击来到程序领空【系统领空是找不到异常点的,因为异常点被作者写在程序中而不是调用系统函数来抛出异常】
【此时的程序依旧处于假死状态不过这并不妨碍我们查看代码段】然后输入刚才我们找到的异常地址:Ctrl+G 输入:0040d918 【记得回车】
可以看到异常点了,这里我们直接从断首开始复制二进制【也就是这里异常点的特征码方便等下异常之前找到它】
好了我们重载一下程序然后重新下断点用快捷命令行:bp CreateWindowExA 【记得敲回车】之所以下这个断点是因为现在如果直接到程序领空里看代码是没有任何代码的【因为此时VMP壳还没有释放源代码】这个断点作用就是在VMP释放代码以后程序运行之前断下来【时机刚刚好不多也不少】
程序断下来以后我们AIT+E 或者直接Ctrl+G输入00401000【回车来到程序领空】然后我们直接 Ctrl+B 二进制码快捷查找命令粘贴刚才复制的二进制码也就是俗称的特征码
直接来到了断首我们直接按F2下断点然后运行跑起来看一下
结果又抛出了一个相同的异常而且还是刚才的位置那是怎么回事仔细一看原来是因为我们用二进制特征码找到的地方不是刚才抛出异常的地点看来这个暗桩并不存在为一个啊,可能有3、4、5、6个那我们该怎么办呢?没关系我们就继续用特征码找 直接CTRL+L 来到下一个特征码位置【直到提示找不到下一个】每找到一个就下个断点然后我们看看找到几个最后找到两个好的那我们重新载入程序
继续更新教程最近作者对防逆向一块很是上心,我发现他最新的版本启动了可可高级验证模块所谓高级就是FZ验证开始验证你的合法性换句话说作者的验证后台开始起作用了它会判断你的账户和密码是否为正版用户如果正版点击登录提示成功如果你的账户和密码没有存在于它的后台他就返回一个错误参数给你但是这个参数返回后你点击登录以后没有是没有任何效果的有人可能好奇高级和普通有什么区别【高级只返回一个参数】【普通返回多个参数】高级参数:即为无效果参数所谓无效果就是不会触发任何暗桩和提示【间接的增加了逆向的难度】普通参数:每一个返回值都可能处发一种提示或者一种暗桩而我们可以根据触发的暗桩或提示顺藤摸瓜【方便我们逆向】好了 话不多说我现在来彻底分析一下这个FZ的验证思路首先:如果通过外层的可可验证,验证外壳会释放两种文件1.第一种:真真的FZ程序 2.第二种:第一层通过的标志
标志文件的作用:作者说是用来防封的而通过本人实践发现真真的FZ在启动之前会寻找标志文件如果没有发现即不会启动那么现在我们的逆向分析思路就变得很清晰了1.首先要通过可可的外壳验证让其释放真真的FZ程序和标志文件2.启动真真的FZ然后让其成功可是我发现作者最近不光启动了高级模块而且还加强的VM的力度把登录关键CALL里的代码V的一塌糊涂根本没法分析而且即使现在你如何努力最后发现登录按钮就像失效了一样再也不会有任何效果这里就要用到一个巧妙的方法,因为旧版验证可以释放验证程序而且程序本身VM力度很弱所以我们只需要找到一个旧版本的验证然后将其逆向让它释放标志文件然后在下载一个新版FZ然后 用PE提取工具提取藏在程序内的新版FZ最后即可达到逆向目的
好了正式开始新的教程首先下载一份它之前的版本我在这里已经帮大家提供了下载地址地址:https://www.lanzouw.com/i12cm0h 这是它2.0的版本
我们下载下来然后用OD加载这里我给大家推荐一款OD过检测插件是大牛最近才更新的玩意这东西很好用ScyllaHide下载地址:https://www.lanzouw.com/i126ywf下载好后按照下图配置
然后进入plugins文件夹中
将这些东西拖进OD的plugins文件夹中
然后再启动OD
根据不同的壳选择不同的对策VMP壳就选择VMP
好了然后将2.0FZ载入OD这次只用修改标志位暗桩不会再被触发因为过检测插件过了暗桩检测还是按照之前的方法下LocalAlloc 断点然后修改标志位为0双击去除断点运行【不会的往上看】
这次很顺利的进入了FZ登录界面
老办法用字符串搜索或者用易语言按钮事件按钮事件代码:FF 55 FC 5F 5E切记做这一切的时候一定要在程序领空
然后Ctrl + B 输入按钮事件特征码
双击下断因为作者启用了可可高级模块所以即使这里我们通过字符串ENO、返回错误、黄金会员点数不足、扣点成功、err 等等一系列的关键字修改后点击登录还是没有任何提示和功能但是通过之前的我的分析发现它的按钮CALL进入后无非就是上述所有字符串代码验证全部跑一遍之后最后进入一个关键CALL这个CALL也就是在网络验证成功之后释放FZ源程序和标志文件的CALL这个CALL也在登录按钮CALL里有兴趣的朋友可以自己分析一下上述所有字符串改完之后还有一个网络回调CALL那里用MOV eax,1retn赋值之后最终会调用到我说的这个关键CALL里不过在作者启用高级函数之后之前所有的错误字符串都不会再报错只能用笨办法下按钮断点之后F8单步一步一步跟踪才能到达最后的关键CALL这里我就不在叙述有兴趣的朋友自己试验吧这里我直接告诉大家怎么找到这个CALL用关键词搜索
关键词:请选择地下城与勇士目录新的版本因为登录CALL所有代码已经被VM干净不会再有任何字符串可以搜索所以现在只有用老版本开刀了找到之后双击进入
这个CALL也就是在所有验证和暗桩都被通过了以后程序最终必需要运行的CALL他会释放源程序和标志文件我们记下段首地址段首地址:004117B0我们现在要做的很简单点击登录代码断在按钮事件CALL然后我们F7跟进替换验证CALL段首为程序终级功能CALL段首做到移花接木
程序断下
F7跟进然后F7单步【因为易语言的按钮事件提供的只是一个接口】换句话说也就是易语言按钮事件本身是一个功能CALL而这个CALL的功能就是当用户按下按钮后易语言按钮功能CALL调用作者想让程序执行运行的功能CALL里运行起来也就是俗话CALL中CALL 【CALL到想要CALL的CALL里】【调用到想要调用的代码段里】所以第一个CALL 只是一个 调用 CALL它调用了验证流程CALL我们F7到验证流程CALL的段首改变原来它要折行的验证流程变成最后要释放程序的流程CALL
我们在段首按空格键然后输入汇编代码:JMP 004117B0 回车然后直接F9让程序跑起来啊哦程序被我们完爆了,恭喜通关我们选择DNF目录之后他就会释放标志文件源FZ也会被释放但是我们现在不需要老版本的 我们这里直接去他的网盘下载最新版本的FZhttp://dnf-nb-zhuxian.cccpan.com/密码:6666
下载好后 用PF工具提取里面的EXE文件即可提取到最新的FZ因为FZ里自带垃圾安装所以我直接为大家做好了压缩包链接FZ最新版本:https://www.lanzouw.com/i12cx7aPE文件提取工具:https://www.lanzouw.com/i11atzgPE提取工具用法【打开FZ选择进程】如下图所示先打开FZ然后打开PE工具FZ会弹出虚拟机检测提示我们无视找到FZ的进程然后第一个进程双击点击提取
可以看到文件夹里多出了三个其中两个DLL一个真真正的FZ程序我们现在双击真正的FZ程序不会有任何反应我们直接尔到OD中看看
看来真正的FZ也带了壳,懒得查壳了直接手动找一下OEP吧用的是ESP定律
首先F8单步然后观察寄存器中ESP和EIP的变化当两者同时变动以后【也就是同时变红以后下硬件断点】
很幸运当F8单步第二步就发现ESP和EIP同时变红鼠标点击寄存器中的ESP的值右键按照下图
然后直接F9跑一下程序断在了一个很大的跳转上熟悉ESP定律的都知道百分之80单步F8一下就是OEP【程序入口点】我们单步F8一下
来到了一片乌漆嘛黑的地方删除分析即可恢复源代码发现还是和刚才程序载入入口的代码一样那我们再一次用ESP定律再一次F8单步ESP和EIP又一次同时变红我们继续在ESP处下硬件断点F9跑起来程序断在了一个JMP上面我们F8到JMP在F8一步就到了程序的入口点
看得多了也就懂OEP【程序真正的入口点长得什么样了】
然后我们删除所有硬件断点
F9运行的话会退出【因为之前跑过一次程序】所以我们提前下一个退出断点
下好断点F9跑起来程序退出了我们看堆栈堆栈的第一行就是程序中调用退出功能CALL的回调段首堆栈就像一个瓶子它的作用是存一些需要处理的数据数据被调用以后会被装进瓶子内用完以后会被扔出去也就是哪来的回哪去电脑想要知道它从哪里来就得顺藤摸瓜这里的藤就是踪迹我们直接在堆栈窗口的第一行回车键敲一下就回到了它进来的下一行发现他不过是一个退出功能CALL我们直接段首RETN
上一个【retn返回参】下面第一行就是下一段代码的段首这是规则我们直接将其retn但是程序此时已经死了所以只好复制二进制特征码我们得在他死之前提前来到它死去的那个地方盗梦空间都看过吧?小李子演的.就是在梦里制造一个梦【也可以用陈奕迅的歌词来解释:梦里梦见醒不来梦】其实看完以后挺感动的因为小李子所有的梦都围绕着一个梦展开那个梦就是他妻子没死之前的梦他之所以在梦里做梦只是因为他想活在他想活在的那个梦里
烧脑又拗口的语言但是好好用脑细胞分析通了也许你也会感动到好了我们重载程序相当于创造一个梦境这个梦境是在程序还没有死之前但是我们其实知道它会死所以我们要做的就是不能让他死推荐大家看一部小短片:解夏的MV【做的相当的棒】看完你不会明白什么{:5_188:}但是当你开始假设MV里的救了女孩的那个男人是当初预见女孩的男孩长大以后穿梭时空回来拯救女孩防止她爱上当初的那个自己的那个人你就会明白点什么了{:5_188:}我们选中这段促使程序假死的代码右键选择二进制 —— 二进制复制然后重复之前的寻找OEP的步骤【因为没到达OEP之前程序壳不会释源放代码】到达OEP之后Ctrl+B 搜索特征码找到以后RETN掉然后运行
好了程序总算复活了
然后呢?然后我们随便打开一个文件可以新建一个记事本在记事本页面选中输入A然后按HOME我们不能用DNF程序做演示了因为DNF程序自带驱动保护无法任何形式的调试如果用打开DNF程序后按HOME键以后OD就会奔溃我们也就是失去了调试的机会所以只能勉强用记事本做例子演示了当按完HOME 键以后最小化记事本打开FZ发现FZ没有任何提示了这就证明FZ加载记事本成功了然后我们在FZ界面按F1
然后我们顺腾摸瓜搜索字符串关键字:黄金然后双击进入代码段然后我们在断尾下断
我们回到FZ继续按F1程序断下我们F8单步看看它返回到哪究竟被谁调用了
返回到这并没有用因为没有跳转可以跳过这个调用【我们要跳过错误提示所以要寻找能跳过它的判断】我们继续F8单步发现来到了系统领空我们直接:AIT+F9让它回到程序领空我们从系统领空出来后直接来到了程序中调用它的地方我们发现有在调用他的地方的上面有一个判断可以跳过错误提示我们双击下断点然后改成:JMP
改完以后我们F9让程序重新运行起来在JMP处下断点按F1键程序重新断下来断在了JMP上我们F8单步F8到下一个CALL上我们回车进入看看只有一句JMP【我们回车跟上去看看】里面只有一个CALL我们在回车跟进去看看一直跟到这里我们发现
发现是一个易语言提供的调用DLL的功能CALL我们不用管按小键盘上的负号键也就是减号键 - 回到我们之前进入之前的地方然后继续F8好了今天就分析到这了
挺好,很详细,未完待续,网络可以在这里继续编辑,不必重新发布新帖。 谢谢楼主呦 挺不错的的教程 感谢分享!! 学习学习学习 谢谢楼主分享 谢谢楼主呦 大佬找的就是你 感谢楼主分享