新人初学逆向,求大佬帮忙看看这个程序,给点思路或是提示
起因是我对逆向破解感兴趣,在论坛里学了一段时间,又想找个群学习,结果在加群的时候,群的入群条件:是分析这个程序,拿到进入群的答案于是趁热打铁,刚好拿我这段时间的学习成果来检验下,果断立马下载文件(我不信还治不了你),我就先执行程序,界面如下
心中窃喜,感觉很简单,有提示字符串可以搜索,于是立马拖进OD,直接F9运行,随便输入几个数字,界面如下
接着就直接中文搜索,界面如下
出现的字符停留的位置,不墨迹,直接F2断点,再次运行,F8跟进,提示出现
还是随便输入几个字符,继续F8跟进,大跳转出现,继续F8,跳转后还是继续F8,之后走了几行指令,程序执行结束,界面如下
之后,我反复输入不同的数据,调试,结果还是一直走那个大跳转,调试期间,又仔细看了看堆栈以及寄存器,还有数据界面,看看是否会出现关键字符,但很遗憾,只看到了我输入的字符。尤其堆栈,除了能看到我输入的字符,没有其它可疑的字符出现。最终,我就采取最蠢的办法(大佬别笑话哈),从断点的地方开始F8或F7跟进,分析各个指令的意图,结果如下
红圈的地方,我就仔细分析了一下,发现输入的字符的个数必须16个(CMP ECX,0X10),于是我输入16个1,结果就不走那个大跳转了
分析到这以为有点眉目,结果往下各种F7/F8跟进跟出,NOP掉各个跳转指令,堆栈窗口分析,还是没有可疑字符出现
希望论坛里的各位大佬抽点您宝贵的时间帮我看看
给点思路或提示啥的,但千万不要直接给答案,我想看看我分析时哪里出问题了
感谢!
程序连接如下
https://wwa.lanzoui.com/inUQ5j2x5nc
先使用ida分析吧。主要验证流程都在这里了
int v3; // edx
unsigned int v4; // ecx
char *v5; // edi
char *v6; // esi
char v7; // al
int v8; // edx
const char *v9; // eax
char v10; // BYREF
memset(v10, 0, 0x104u);
sub_401020("请输入邀请码:");
v3 = sub_401060("%s", v10);
if ( v3 )
{
v4 = strlen(v10);
v3 = v4 == 16;
if ( v4 == 16 )
{
v5 = &v10;
v6 = &byte_44E9D5;
do
{
if ( *(v5 - 1) == 53 )
{
LOBYTE(v4) = *v5;
*v6 = sub_401200(v4, v3);
v7 = 1;
}
else
{
*v6 = 0;
v7 = 0;
}
*(v6 - 1) = v7;
v5 += 2;
v6 += 2;
}
while ( (int)v6 < (int)&unk_44E9E5 );
v3 = sub_4010A0() == -661827796 && v8 == 1329810648;
}
}
v9 = "输入错误\n";
if ( v3 )
v9 = "输入正确\n";
sub_401020(v9);
exit(0); 第一次发这样的贴子,图顺序不知道咋乱了,不好意思,各位大佬 大佬们,帮我看看 situhaonan 发表于 2023-7-24 13:07
大佬,你是如何找到的啊,给点思路呗 situhaonan 发表于 2023-7-24 13:07
大佬咋找到的,给点思路呗 这个软件都打不开,是什么情况,新手一枚
mihutu 发表于 2023-7-26 15:30
这个软件都打不开,是什么情况,新手一枚
无法运行?win10系统应该可以的 darksied 发表于 2023-7-31 08:54
先使用ida分析吧。主要验证流程都在这里了
int v3; // edx
如果硬要OD分析呢,这个验证该咋找
页:
[1]
2