记录下小白第一次分析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
标签:
记录第一次AES算法程序注册过程
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
千金楼资源网 Copyright www.htabc.com
暂无“记录第一次AES算法程序注册过程”评论...
更新日志
2024年11月15日
2024年11月15日
- 孙露《怕什么孤单3CD》深圳音像[WAV分轨]
- s14全球总决赛目前是什么结果 s14全球总决赛赛程结果图一览
- s2TPA夺冠五人名单都有谁 tpa战队s2夺冠队员名单一览
- s13wbg战队成员都有谁 wbg战队s13成员名单一览
- 网友热议《幻兽帕鲁》停售、赔千万日元:那也赚麻了 不亏
- 这谁顶得住 《最终幻想7:重生》尤菲3D作品穿上终极芙蕾娜衣服
- 外媒称PS5pro违背承诺:《蜘蛛侠2》根本没法4K60帧
- 群星.2007-中文十大金曲30周年纪念专辑【RTHK】【WAV+CUE】
- 杨林.1989-留一点爱来爱自己【综一唱片】【WAV+CUE】
- 南合文斗.2007-陪君醉笑三千尘鸟人唱片】【FLAC+CUE】
- 群星《我们的歌第六季 第1期》[320K/MP3][90.72MB]
- 群星《我们的歌第六季 第1期》[FLAC/分轨][456.01MB]
- 李雨寰《Break Free》[320K/MP3][98.39MB]
- 草蜢.2001-《真经典》环球唱片[WAV+CUE]
- 群星.2009-第4届2008十大发烧唱片精选[FLAC+CUE]