avatar

目录
网络验证对抗(PC逆向5)

网络对抗1.0

软件打开,有个试用次数,11次试用次数(0次也算一次),好像是写进注册表里面的,如果能在注册表找到他的试用值, 修改大一点应该也行。

将软件拖进OD,先进行一次字符串智能搜索,搜索请联系软件商激活软件字段,看到一个登陆验证,双击进去,往上拉,有cmp比较,然后je大跳转,往下拉看一下,有进入软件,刚才试用软件时候也知道,按钮名称叫进入软件,所以在这里的对比和跳转处下断观察一下

cmp是把[eax]的值与1 比较,如果相同就不跳

在数据窗口中,将其的值修改,然后运行,点开软件发现说是破解版。

重新打开软件,回到这里,往下拉,发现有几处都是软件试用,登录软件字符串,也发现有几处cmp对比,和大跳

这俩个cmp比较可疑,下断跟踪一下,第一个cmp如果不等于1,就是一个大跳,这里不能让他跳,将他的值改为1

然后继续跟下去,第二个cmp,先点击一下那个jnz看一下跳到那里,跟到箭头下,发现上面有个jmp,按照代码逻辑,如果这个jnz不实现的话,就会到jmp处跳转

但是这个jmp跳过了登录成功的样子,所以不能让他经过这个jmp,所以要让这个jnz实现,所以cmp[eax]的值不等于0

修改后,运行,看一下程序

登陆成功,但是是破解版。说明这里有暗桩,还有地方在检测,那就通过字符串搜索一下这个暗桩,搜索破解版

功能都用不了的

来到这里,重现运行软件,然后可以从登陆软件那里入手,先运行脚本,下按钮事件断点

然后F7跟进去,先观察一下这里的代码,往下拉,发现也有CMP和大跳,按照习惯,下断跟踪

下断后,F9运行,跳到这里,这里比较[eax]的值和1比较

果然涉及到注册表

这里eax的值是2,那么就是这个跳转会实现,那么就手动将他改为1,看下不跳转会发生什么

改好以后,往下看,也有跳转,在每个跳转处都下个断看看

跟到后面就没了,那就运行,看软件

又说是破解版了,所以看来刚才那里是处理登录的,那么就搜索破解版,入手吧。

又是比较,那么简单了,将他改为1就好了。

然后回到刚才的几处,将比较的值也修改一下,观察软件,已经破解成功了。

但是还有个问题,标题栏显示是试用版,也要改一改,进入智能搜索,搜索试用版

将那个跳转nop掉就ok了

现在就是正式版了


可x网络验证

这是一款可x的网络验证的界面

有他的源码,所以通过源码一起来逆向会方便很多

把软件拖进OD,下易语言的按键断点

点击登录软件按钮,F7单步跟进去,先下拉看一下指令,配合源码一起看,找大跳转,因为源码那里有两个个重要判断

这个je跳转往下拉,发现有个eno,源码那里有个iserrno的函数调用

这里就有eno,所以这个跳转可能就是第一个重要判断了

这个判断来自于test eax,eaxeax来源于上面的第一个call,所以哪个call也下断

看一下这个je,往下拉,有两个jmp,这两个jmp都是大跳,会跳出下面那些pass,user 的字段,看代码就是配置信息,登录成功后的东西,所以不能跳走

test eax,eax是什么意思了

Code
1
test指令的操作是将目的操作数和源操作数按位与,运算结果不送回目的操作数,然后根据结果设置SF,ZF,PF标志位,并将CF和OF标志位清零,一般下面会跟跳转,根据ZF标志位是否为零来决定是否跳转,即,这句意思就是判断eax是否为零

就是这俩个指令为0,je就不会跳转

跟进这个call内部,观察代码,找出可以让值返回0的位置,跟到这个je处,发现跳转未实现,然后返回1。

那就让他跳转实现,就可以跳过mov eax,0x1

跟出去,已经可以了。这个je跳转实现了

有另一种办法返回0,就是在进call以后,在头部直接返回0

代码被VM情况下

有时候代码被vm以后,就看不到这么多东西的了,所以要记下特征,易语言的内部是不能被VM的,Ctrl+B FF 25

就是这里,这里也可以在外面进来

然后像刚才那样改代码,不过这里要加一个leave使他自己堆栈平衡

第一个判断处理完了

继续运行,发现程序被关闭了,看源码,第二个判断中,如果是真的,就结束掉进程。

第二个判断,是在第一个判断内的,就是call里面,所以就在call里面,每个call都观察一下,看下那个是对比字符串的。

进入这个call里面,看右下方堆栈窗口,有俩个字符串不相同,那么现在就是为了让两个字符串相等就好了。

选择长的那串,就是第二串字符串,然后在数据窗口处全选他的字符串,然后二进制复制

在跳到第一串,相对较短的那串字符串,因为长度不同,所以先将其置0,在二进制粘贴

这样子逆向就完成了。

那个关闭进程那个,有其他方法解决

第一步那个je修改后,F8一个一个的慢慢跟,看见有Call就按回车进去看下是干嘛的,然后没什么特别的就继续F8在跟下去,到了这个call

这里是易语言内部

可以看到,退出函数。

那就在头部直接把他retn

达到同样的效果。

不过不推荐这样子做,因为敢这么干,是因为知道他结束后,就没干其他事了,如果逆向陌生的程序,并不清楚他结束后下一步会不会是格式化磁盘植入木马锁硬盘?或者其他各种保护(为什么是保护,因为我是攻击方)手段


文章作者: KeyboArd
文章链接: https://www.wrpzkb.cn/pojie5/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 KeyboArd's Blog
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论