前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一道逆向题

一道逆向题

原创
作者头像
极安御信安全研究院
发布2022-03-24 15:44:44
1940
发布2022-03-24 15:44: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  就可以了

然后写脚本

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 接下来调试程序
  • 所以现在
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档