freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

一道逆向题
2022-03-24 15:29:44
所属地 辽宁省

查壳后程序是一个32位无壳的程序

拉到od和ida中分析一下

经过分析,

首先分析第一个字符串比较的call

取字符串的第一个字符,循环字符串n次(n为字符串的长度),将第一个字符相加n次,然后这个值=550也就是0x226

所以这里只要满足 字符*n=550 就可以,经过后面的分析这里n需要填10(见下文)

也就是 7开头长度为10 的字符串

接下来调试程序

在段首004010770地址下个断点(ida中main函数开头的地址)

我们一路单步(F8)来到这里,这里必须跳转(可以修改标志寄存器的S位改变是否跳转),不然程序是不会进行字符串比较的

下面那个call就是进行字符串比较的call了

我们单步(F7)进入,发现这里面有两个跳转

第一个jnz就是==550的判断

第二个jnz是字符串是否相等的判断

对应ida中

这里我们看到一串类似base64的字符串

搜索字符串看一下

猜测这里他自定义了base64编码表

解密得到

因为这里解密到的长度是10,所以上面的n才为10,不然加密后的字符串长度是不够的

此时我们测试一下,

当算法call执行完成后我们修改字符串为 上面解密到的,我们看能不能成功

在内存窗口中修改后

然后来到字符串比较的地方

我们可以看到要进行比较的两个字符串是一样的

所以现在

只需要让我们输入的字符串经过算法call后等于   =>=:<2>?=2

然后分析一下算法的call

算法call里主要就是这个call,然后这个call执行了4次,我们点进去

分析

第一次执行的是4

第二次1

第三次2

第四次3

此时只需要将  =>=:<2>?=2 反推回来

也就是

先每一位+1,再除啦第一位后面每一位-3,再每一位xor9  就可以了

然后写脚本

# 网络安全技术
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者