记录下小白第一次分析AES算法的软件注册的过程。
软件的注册程序就是configassist如图,启动软件后点这个cofig然后下一步一直到注册界面,此时是没注册的,点Manual输入注册码就好了
首先DIE查一下软件,发现是C#写的,直接拖到dnspy里面调试起来,搜索一下关键字定位到注册验证的地方
这里调用了getLicCheckLicense() 返回值为0就表示注册码是有效的,然后就调用DecodeLicense解析提取注册码的内容
跟踪发现getLicCheckLicense()里面调用的是C++的DLL
IDA打开看下getLicCheckLicense(),主要函数就是sub_10001770
10001770 前部分是用注册码逐个查表然后把下标转为5位二进制字符串然后再8位二进制转16进制
接着依次取0x20个字符,传到sub_1000A9F0函数处理
sub_1000A9F0函数里前部分 主要函数是sub_1000AEE0, 作用是用字符串ruediger得到一个16位数组
sub_1000A9F0函数里后部分 主要函数是sub_10016730,sub_10016800;其中sub_10016800里面各种亦或移位查表替换操作,
花了好些时间连续跟了几遍之后感觉怎么像个什么算法,于是用findcrypt插件查了一下找到了S_BOX和INV_BOX确定是AES解密算法,模式是ECB,NOPadding.
而上面得到的16位数组就是密码
AES依次对每16个字节解密之后再倒序然后再用AES解密一次,最后转成二进制
到这里注册码的处理基本就完了,后面就是依次读取2进制串转为十六进制然后复制给License的各个成员
LicenseHardwareID 0x00-0x30 (二进制字符串的0-0x30)
AppId 0x30-0x10
MaxUsers 0x40-0x10
CreateDate 0x50-0x10
ExpirationDate 0x60-0x10
LicenseVersion 0x70-0x10
StartDate 0x80-0x10
LicenseSerial 0x90-0x20
LicensePubVersion 0xB0-0x10
licIsParamBitSet 0xC0-0x10
licIsAuthorBitSet 0xD0-0x10
0xE0-0x238 这部分是LicenseVersion 中间4位是控制的,直接为0就不处理;前十个为小版本号的二进制,后2位是大版本号必须为3,二进制为11;
在赋值的过程中有个sub_100027B0函数里面有验证CryptVerifySignatureA()会导致getLicCheckLicense返回4,这里我是修改sub_100027B0的返回值把3改为0了
改了之后,DLL加载时MD5过不了,于是找到加载的地方,有MD5值判断,修改存储的MD5值就行了
替换2个修改的DLL试一下看是注册成功,因为手里没有设备所以用不了他的主程序,不知道有没有坑,后面等有设备了再看看。
软件的注册程序就是configassist如图,启动软件后点这个cofig然后下一步一直到注册界面,此时是没注册的,点Manual输入注册码就好了
1.png
2.png
首先DIE查一下软件,发现是C#写的,直接拖到dnspy里面调试起来,搜索一下关键字定位到注册验证的地方
3.png
这里调用了getLicCheckLicense() 返回值为0就表示注册码是有效的,然后就调用DecodeLicense解析提取注册码的内容
4.png
跟踪发现getLicCheckLicense()里面调用的是C++的DLL
5.png
IDA打开看下getLicCheckLicense(),主要函数就是sub_10001770
6.png
10001770 前部分是用注册码逐个查表然后把下标转为5位二进制字符串然后再8位二进制转16进制
7.png
8.png
接着依次取0x20个字符,传到sub_1000A9F0函数处理
9.png
sub_1000A9F0函数里前部分 主要函数是sub_1000AEE0, 作用是用字符串ruediger得到一个16位数组
10.png
sub_1000A9F0函数里后部分 主要函数是sub_10016730,sub_10016800;其中sub_10016800里面各种亦或移位查表替换操作,
花了好些时间连续跟了几遍之后感觉怎么像个什么算法,于是用findcrypt插件查了一下找到了S_BOX和INV_BOX确定是AES解密算法,模式是ECB,NOPadding.
而上面得到的16位数组就是密码
11.png
12.png
13.png
AES依次对每16个字节解密之后再倒序然后再用AES解密一次,最后转成二进制
14.png
到这里注册码的处理基本就完了,后面就是依次读取2进制串转为十六进制然后复制给License的各个成员
LicenseHardwareID 0x00-0x30 (二进制字符串的0-0x30)
AppId 0x30-0x10
MaxUsers 0x40-0x10
CreateDate 0x50-0x10
ExpirationDate 0x60-0x10
LicenseVersion 0x70-0x10
StartDate 0x80-0x10
LicenseSerial 0x90-0x20
LicensePubVersion 0xB0-0x10
licIsParamBitSet 0xC0-0x10
licIsAuthorBitSet 0xD0-0x10
0xE0-0x238 这部分是LicenseVersion 中间4位是控制的,直接为0就不处理;前十个为小版本号的二进制,后2位是大版本号必须为3,二进制为11;
在赋值的过程中有个sub_100027B0函数里面有验证CryptVerifySignatureA()会导致getLicCheckLicense返回4,这里我是修改sub_100027B0的返回值把3改为0了
15.png
15-1.png
改了之后,DLL加载时MD5过不了,于是找到加载的地方,有MD5值判断,修改存储的MD5值就行了
16.png
17.png
替换2个修改的DLL试一下看是注册成功,因为手里没有设备所以用不了他的主程序,不知道有没有坑,后面等有设备了再看看。
18.png
19.png
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
更新日志
2024年11月01日
2024年11月01日
- 群星《狐妖小红娘月红篇 电视剧原声带》[320K/MP3][233.61MB]
- 英雄联盟s14四强淘汰赛规则是什么 全球总决赛四强淘汰赛规则详解
- 英雄联盟s14四强赛怎么分组 S14全球总决赛四强赛分组规则详解
- 英雄联盟s14四强赛抽签规则是什么 S14全球总决赛四强抽签规则详解
- ButterQuartet-ScintillaEarlyItalianStringQuartets(DeLuxe)(2024)[24Bit-WAV]
- 草原最美情歌《迷醉女中音》2CD/DTS-ES[WAV]
- 爵士女伶何芸妮《靡靡之音》(香港版)[WAVCUE]
- 游戏中辱骂他人同样侵犯名誉权 一玩家被判道歉
- 老游戏远程共享申请失败 美国版权局拒绝豁免请愿
- 通过本地化支付解决方案,解锁150亿美元拉美和非洲游戏市场
- 群星《狐妖小红娘月红篇 电视剧原声带》[FLAC/分轨][574.68MB]
- 群星《红色冲浪板 电影配乐专辑》[320K/MP3][106.63MB]
- 罗艺恒《What Could've Been》[320K/MP3][50.62MB]
- 于台烟.1989-人间山水【银河唱片】【WAV+CUE】
- 杨克强.1992-特制的面具【恩华声视】【WAV+CUE】