Poseido 发表于 2020-9-22 22:49

大神能看看这个注册码算法是啥意思么?

背景:软件申请码12位,包括大写字母和数字,key是16位,也是大写字母和数字。
用IDA最后找到的加密算法应该是下面这个函数,没怎么看懂,求指教

void __thiscall sub_44C690(CWnd *this)
{
CDialog *v1; // esi
int v2; // eax
int v3; // eax
char *v4; //
char v5; //
char v6; //
char v7; //
char v8; //
char v9; //
int v10; //

v1 = this;
CWnd::UpdateData(this, 1);
sub_403E70(&v9, (char *)v1 + 116);
v10 = 0;
v2 = sub_41C680(&v8, (char *)v1 + 120);
LOBYTE(v10) = 1;
sub_403E70(&v7, v2);
LOBYTE(v10) = 2;
v3 = sub_41C680(&v6, (char *)v1 + 124);
LOBYTE(v10) = 3;
sub_403E70(&v5, v3);
LOBYTE(v10) = 4;
sub_41C680(&v4, (char *)v1 + 128);
ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>::~CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>(&v5);
ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>::~CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>(&v6);
ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>::~CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>(&v7);
ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>::~CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>(&v8);
LOBYTE(v10) = 10;
ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>::~CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>(&v9);
if ( VsCheckRegCode(v4) )
{
    WriteRegCode(v4);
    CDialog::OnOK(v1);
}
else
{
    CWnd::MessageBoxA(v1, asc_4AD0D4, 0, 0);
}
ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>::~CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>(&v4);
}

solly 发表于 2020-9-22 22:55

应该是看这个函数吧: VsCheckRegCode(v4)

dx681 发表于 2020-9-22 23:15

if ( VsCheckRegCode(v4) )
{
    WriteRegCode(v4);
这里吧

Poseido 发表于 2020-9-22 23:51

本帖最后由 Poseido 于 2020-9-23 00:06 编辑

好的,我再看看,多谢

EnterpriseSolu 发表于 2020-9-23 08:20

找个VC++,建立一个基本的MFC程序,把这段代码跟UI绑定,单步调试,可看到它的计算原理

_默默_ 发表于 2020-9-23 08:41

看不懂就动态调试啊

Poseido 发表于 2020-9-23 09:34

跟了一下,发现VsCheckRegCode这个函数被封装了。。。

chenhuazi 发表于 2020-9-30 20:41

进入动态调试分析
页: [1]
查看完整版本: 大神能看看这个注册码算法是啥意思么?