ICEY 发表于 2020-12-29 22:40

入门级追码(等级3)

本帖最后由 ICEY 于 2021-1-24 13:57 编辑

等级3:

{:1_927:}美好的夜晚,可不要浪费了,学点知识吧!{:1_927:}这次的RM依旧是 给 像我一样的新手 练习用的。
(我的水平不足以让我写出让高手玩的RM{:1_936:})下载:成功截图:重要的是看懂汇编指令推断算法哦。如果是爆破的话未免太简单了https://static.52pojie.cn/static/image/smiley/default/45.gif。
小提示(如果没思路):刮刮乐1.看看区段。2.密钥可能会比你想象的要长一点。3.可不止有一处验证呢。

weikun444 发表于 2020-12-30 08:39

本帖最后由 weikun444 于 2020-12-30 08:54 编辑

read(0, v3, 0xC8u);   //取输入
for ( i = 0; i <= 8; ++i )
    dword_405020 = v3 - 48;//逐位减48

注:402000里存的是码表

然后进入验证处:
void __cdecl __noreturn sub_401356(int a1)
{
signed int i; //
int v2; //

v2 = 0;
for ( i = 0; i <= 7; ++i )
{
    if ( *(_DWORD *)(4 * i + a1) != dword_402000 )
      sub_4013F2();//打印错误信息
    ++v2;//8位逐位比较
}
if ( v2 == 8 )//为8说明每位相等
    sub_40F00A();//进入正确处理
sub_4013F2();//打印错误信息
}

void __noreturn sub_40F00A()
{
int v0; // edx
int v1; // eax

v0 = 0;
v1 = dword_405040;
do
{
    v1 = dword_40FF6C;
    ++v0;
}
while ( v1 != 2 );
if ( v0 == 5 )
    sub_4013D8();//打印 i love you
sub_40140C();   //打印 good
}

湿求了鸭 发表于 2020-12-30 00:39

小白不会,只能这样{:1_923:}

SRE-unicode 发表于 2020-12-30 13:43

还是比较简单的

第一层:一共输入9个数

第二层:检查前8个数与dword_402000是否匹配

写个脚本读一下:
```
a=""
for i in range(0x402000,0x40201f,4):
    a += str(Dword(i))
print(a)
```
第三层:

这其实算是一个迷宫,dword_40FF6C一共有9个有效数字,但是要满足用户输入的第9个数字向v1赋值后,刚好循环五次退出,才算成功。
很明显是要从7开始也就是dword_40FF6C。

jy04468108 发表于 2020-12-30 09:27

分析了一会儿。


IDA中




发现是和内存地址402000作比较,那么前面八位的数据就出来了。



下一关:

根据内存地址0040FF6C这结合算法得出第九位的值为:2

小手冰凉; 发表于 2021-1-14 17:20

我很好奇IDA里面全是未识别函数的伪代码咋能看懂,OD操作37555561 这几位必须一样
后面是在根据最后输入的一位进行判断,比较复杂 ,没完全看懂,大概是   ...*4+固定值]...   让这个值在那里面转来验证

mllaopang 发表于 2020-12-30 08:16

加油!加油!加油!加油!加油!

龙神邪少 发表于 2020-12-30 08:35

加油,一起学习

lowellddh 发表于 2020-12-30 09:26

嗯嗯,一切学习下~~

yuan-0.0 发表于 2020-12-30 10:21

alam-132 发表于 2020-12-30 10:22

楼主好牛,已经399分了,送你一个热心,升级!{:1_899:}

晴飔 发表于 2020-12-30 10:40

谢谢分享{:1_918:}
页: [1] 2
查看完整版本: 入门级追码(等级3)