首页
社区
课程
招聘
[原创]IdaPro6.6安装程序密钥算法还原
发表于: 2020-9-14 18:04 4789

[原创]IdaPro6.6安装程序密钥算法还原

2020-9-14 18:04
4789

ida是一款常用的静态分析工具,但是需要安装后才能使用,网上可以找到安装后的绿色版或者密钥进行安装,但是没有找到破解版安装包。作为逆向工程初级从业人员,业余分析该工具的密钥算法练练手是不错的选项,对于入门学习者,可以通过复现破解还原过程积累逆向工程经验(萌新第一次发帖,希望各位带佬嘴下留情)。

文章中所有的材料均存放于链接:https://pan.baidu.com/s/16bdMjrWxsP2KfA1MqzE3dQ

提取码:71tr

第一步:

多数安装包都可以通过压缩文件解压,因此首先尝试是否可以解压,选中安装包右键用压缩工具打开发现不能解压,说明该安装包必须在运行时解压内部文件。

图片描述

第二步:

将安装包拖入到od中进行调试,安装包程序正常运行,猜测可能未进行反调试操作。持续点击下一步直至输入密钥,随机输入密钥单机下一步,弹出密钥错误提示框。在弹窗函数下断点,仍然弹出窗口,如下图所示。

图片描述

此时保持安装包窗口状态,不要单击确定按钮,回到od,单击k进入堆栈调用窗口,发现程序并没有调用弹窗函数,且也没有调用窗口创建函数,猜测该安装程序并非单一进程。

图片描述

第三步:

未验证安装程序为多进程的猜想,使用od重新载入该安装程序,在creatfile函数处下断点,监控到进程往系统的临时文件夹创建了一个文件,如下图所示。

图片描述

为证明该文件即为安装子进程,给创建进程的函数下一个断点,如下图所示。

图片描述

od按下F8运行,此时出现安装程序。表明:主进程在系统临时文件夹创建一个临时安装进程,并将自身地址作为命令行参数启动,安装进程进行密钥检测并解压主进程进行安装。

第四步:

在了解程序的框架之后对安装程序进程密钥相关算法进行逆向还原,ida打开该文件,如下图所示。

图片描述

入口函数接口较为复杂,无法直接定位到算法函数,因此先使用od附加调试(调试时进入线程窗口激活所有线程)定位至算法函数再进行代码还原,如下图进行附加调试。

选中对应的进程
选中对应的进程
程序在弹窗函数断点
程序在弹窗函数断点
栈回溯找到调用源
栈回溯找到调用源

并在函数478FFC处发现疑似密钥计算函数(此处在条件跳转指令进行比较的内存处下内存写入断点可以定位,这里就不演示了),如下图所示。

图片描述

第五步:

对密钥校验算法进行还原,使用ida打开安装子进程文件,F5反编译,如下图所示:
图片描述
原始idb文件
图片描述
根据自己的理解和动态调试结果修改的idb文件

第六步:

还原idb文件为源代码,如下:

编译并于源程序比对测试,如下图所示:
图片描述
还原代码计算的hashcode
图片描述
安装子进程计算的hashcode

通过代码计算的hashcode与源程序计算的hashcode相同,算法还原成功(待完全待验证,欢迎补充)。合法hashcode为“73 4D 89 77 37 77 82 3E 11 C1 E6 25 51 B3 D3 51 00 CF 9C C7”,可通过计算碰撞还原合法密钥(欢迎尝试)。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 4
支持
分享
最新回复 (5)
雪    币: 8118
活跃值: (3814)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
少年,SHA1了解一下 
2020-9-14 22:48
1
雪    币: 6027
活跃值: (2832)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习一下。
2020-9-15 08:31
0
雪    币: 1238
活跃值: (239)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
二楼说的对,密钥参考了sha1,但是不完全一样的呢
2020-9-15 09:01
1
雪    币: 83
活跃值: (1092)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
厉害
2020-9-16 18:04
0
雪    币: 14511
活跃值: (4084)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
有进步。思路好。
2020-9-17 12:47
0
游客
登录 | 注册 方可回帖
返回
//