一、工具和调试环境
二、分析用户名/注册码的算法
2.1运行程序
只有一个key编辑框和ok按钮,直接点击ok按钮会报错
010-01.png (17.72 KB, 下载次数: 0)
下载附件
2023-2-10 17:20 上传
2.2查壳
用Die查壳,无壳,vb程序
2.3详细分析
依然是搜索字符串,直接上x64dbg搜索字符串
010-02.png (37.95 KB, 下载次数: 0)
下载附件
2023-2-10 17:20 上传
然后跳转,基本情况和009一样,下面直接放出关键算法位置
010-03.png (176.54 KB, 下载次数: 0)
下载附件
2023-2-10 17:20 上传
其中用到的函数基本在009我们已经熟悉过了,又添加了两个函数rtcBstrFromAnsi和vbaVarCat,前一个是将ascii字符转换为字符串,后一个是拼接字符串,只不过参数是变体。
这段代码就是将name的每个字符的ascii值加10,组成一个新的字符串
010-04.png (118.64 KB, 下载次数: 0)
下载附件
2023-2-10 17:20 上传
将之前新组成的字符串与上图红框框出来的字符串相比较,如果相等,就提示成功。
所以真正的key只要将上面框出来的字符串每个字符的ascii值减10,就可以得到一个固定的key值,为:aNoThEr oNe cRaCkEd !
三、算法核心代码模拟
char* GetKey9()
{
char szName[] = "kXy^rO|*yXo*m\kMuOn*+";
static char szKey[60] = {};
for (int i = 0; i
四、API总结
rtcBstrFromAnsi
// 字符转换为字符串
// 栈传参
char* rtcBstrFromAnsi(char ch);
vbaVarCat
// 变体字符串拼接(pVariant1 = pVariant2 + pVariant3)
// pVariant2 和 pVariant3 字符串拼接在一起,结果放在 pVariant1中
// 返回值等于 pVariant1
Variant* vbaVarCat(Variant* pVariant1, Variant* pVariant2, Variant* pVariant3);