问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
某软件逆向算法探源
硬件与物联网
记录一下日常学习软件逆向的过程,文章探讨了关于某开源软件的逆向分析过程,主要涉及爆破和加密算法分析两个方面,供程序分析新手入门小白分析交流
熟悉程序&&爆破尝试 ------------------ 先乱输一波看程序暴露什么错误信息 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-7badf071dfdfab1fde4433d6da56f6aaf02d4b95.png) 可以看到错误时会返回“无效的ID或名字”这一报错字符串,将程序载入olldbg,右键单击,使用中文搜索引擎搜索“无效”。双击跳转 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-ab06b61f407f91d33e370a869ffe421e05456409.png) 找到入口点并向上溯源,找到使程序跳到此错误处的跳转指令 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-7cd468c7d0a7f13ece392381352ba39f873eb1a5.png) 找到跳转指令,可以看到一个非常常见的指令组合。常常用于输入的正确性 ```php 004C2ABF处是一个call 命令,调用的是验证算法 004C2AC4 处将算法的返回值进行比较。比较相同赋1 不同为0 004C2AC6处 代表比较结果为0时跳转,为1时候不跳转 ``` ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-90a28ff57da2343f9d4f6095d7cf70ba10f431e6.png) 选中算法call,回车进入这个call看一下。 向下看到这个函数是以retn返回的,我们就可以放心大胆的爆破了。 对push ebp做如下修改,让其直接返回 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-7b0b176624e6e017f87dccea6a01a07c9cfcd6e0.png) 运行软件测试一下,可以看到软件显示已经注册,说明我们爆破成功了 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-ec8a50266bec6dbd27bc6999e7ef1cd63f0f2a04.png) 算法分析部分 ------ ### 输入寻址 重载程序,重新定位报错信息,在加密函数调用处和函数头处下断点 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-94380f35304ed16e653c7d0d59e8a886e51ec24b.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-a749f1df90bc24c9a7a406ca41ee32ef4af5dce5.png) 下好端点后运行程序,进入注册页面输入名字和ID(乱输的)。程序随即运行到第一个断点处 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-4414d5c3bbce8280efb973a1bcc8be11580eedac.png) 断点处f8单步观察edx寄存器的变化,edx被赋值0019f364该地址我们在堆栈窗口处锁定该地址,继续f8 看到该地址存储了我们输入的用户名 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-a80258d75b6e1a5856fcb7f32dfed561b442d91c.png) 继续单步跟进程序,可以看到程序又给edi赋值了一个新地址,我们堆栈窗口中跟随->锁定堆栈继续单步f8可以看到这个地址存储了我们输入的序列号 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-388b6d961ee12e1d48a4c89704a04114d6c00ca9.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-29f6e2ed52bfbb3439bef9c7f431f400270143e6.png) ### 绕过长度限制 接下来继续单步跟进到我们刚才下断点的加密函数处,f7进入该函数调用。 简要分析以下这个函数的关键信息,发现A1910,A1423两串神秘字符,这两串字符现在有什么用呢?我们不得而知,从函数头开始单步跟进分析吧 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-692e01a6424624e09a3f845712309fb3c82d96f7.png) 跟进到此处发现一个函数调用,函数调用后是将eax中的值和0xA也就是10进制的10进行比较,单步运行过该函数,看到eax中的值是8 联想到我们刚才输入的序列号“12345678”长度为8 合理猜测刚才那个函数的作用是检测字符串长度,在该处下个端点重载程序重新运行 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-7a464e5dbb4b9010e2d5558f25217f646730f9a6.png) ### 加密探源 成功绕过长度检测后,我们将程序走到A1910处,进入调用该字符串的函数 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-9000c16845c9baa8e61075a8a3222e3572ec0cfa.png) 这里是一个典型的堆栈平衡,对我们程序分析并没有什么帮助,直接步过 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-269670f3e232063e69584b27af427fe28f1e1de6.png) 这里首先取出了A1910的第一位A和我们输入的序列号做运算 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-41d38ba3b5a3d1eb134efa5b963ebc2c9d4cfb1d.png) 接下来我们看到一个没见过的命令 **repne scasb**百度搜索一下 这里我们看到repne scasb 逐位调取了我们输入的序列号和A进行比对 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-217425e786c15b519829d006997e251c525fadfa.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-73f3428ec144eecae81cd751db6653562eb797b3.png) 循环结束后程序加密部分就结束了 我们重载一遍程序,在序列号处输入A191012345,回到repne scas指令处,单步F7可以看到’A‘和’A‘数据匹配了,这时程序没有继续循环而是直接跳到了下一行,并且这个jnz没有跳转 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-31a1035b45791796b2bf577409c6470ac42904ff.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-0eaf3c8790fa1274daaf7c103012377c01c50477.png) 继续运行看到edx的值赋值给了ecx ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-192a94b4ba4ba2834955f6a6a0a60898bacc4cf6.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-ab005f5b8962f701ca05e2d2597b1c6c84b9406c.png) 接下来又到了一个我们不认识的命令 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-0183b0a151f36fef39861ca3cf00fd56df16e7d3.png) 百度搜索一下 > 当repe cmps配合使用时就是字符串按位比较,当相同时继续比较,不同时不比较 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-3054658d3a2c662e12d042c569d37c2108b2eaaa.png) 可以看到是A1910和输入字符串进行比较。 这里我们就可以判断出这个循环的作用就是将我们的输入和A1910A1423进行比较,假如判断失败就在圈1处return 判断成功就在圈2处return ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-7be79e8bdf1003fa05653980f612de4040d98c2d.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-ef8759ebd05d080bee81602c3ba9e8bc0afc4ef4.png) 回到程序主函数继续运行,接下来是一个判断流程。这段程序比较明显是将我们输入的数据从第二位开始(注意下图第一行给eax复制的0x2)按位比较,保证其在0~9的大小范围内 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-f25e8748775c31d974dac48b17bc60408f5bbc5d.png) 这里做了一系列运算,首先将eax和edx相加存储在eax然后将ecx赋值为10,将eax和ecx做除法运算,商存在eax处, 余数存在edx处 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-a46482db4b775b139c358e83295373f069fbf4b9.png) 再接下来是一个比较,比较edx也就是刚才加法除法过后的余数是4,否则跳转 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-fa0ae66734145a23839d21b8eb4f8b88aa95d58f.png) 由于这里我们的余数不是4 因此跳转了,继续跟进我们就返回了,出来看到一个al比较....原来如此 ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-ab68a6cf55c296793331f481bee2982b3c4145f2.png) 搞明白了判定,我们回跳分析,可以看到决定输入是否正确的元素在于**mov eax,ebx。**因为如果上面edx和0x4比较如果相等的话,就不会跳转,bl就会被赋值为1 eax也会被赋值为1,这样al的值就为1了, ![image.png](https://shs3.b.qianxin.com/attack_forum/2023/01/attach-b3cc571d040df3bc7e5d23e25e69d7a45b83852c.png) 这样我们就搞明白了这个题的序列号检测算法 首先前五位必须是A1910或者A1423 中间三位为任意0~9数字,**最后两位的ascii码相加后**与10相除余数必须为4(也就是个位为4) 参考文章 ---- [repne scasb 详解*LqL\_1的博客-CSDN博客*repne scasb](https://blog.csdn.net/abc_670/article/details/79479364) [repne scasb详解*kunlong0909的博客-CSDN博客*repne](https://blog.csdn.net/kunlong0909/article/details/8729741) [repne scasb 用法**\_N4c1**的博客-CSDN博客\_repne scasb指令](https://blog.csdn.net/qq_43504939/article/details/102855783) [repe cmps指令 - 紅人 - 博客园 (cnblogs.com)](https://www.cnblogs.com/feizianquan/p/15036716.html) P.S:本文仅供技术交流,请勿用于商业及非法用途。
发表于 2023-01-29 10:57:55
阅读 ( 5934 )
分类:
硬件与物联网
0 推荐
收藏
0 条评论
请先
登录
后评论
绿冰壶
学生
18 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!