首页
社区
课程
招聘
未解决 Acid burn逆向求助
2023-7-31 17:32 2292

未解决 Acid burn逆向求助

2023-7-31 17:32
2292

看过各个大佬的一些分析贴已经能理解绝大部分的代码,只是后续拼接成CW-****-CRACKED这部分的代码不太理解。希望各位师傅能帮忙解答一下。
图片描述
在备注*2的结果后边的部分就开始不理解了,到底是怎么操作才把结果拼成了CW-****-CRACKED的样式或者哪些特征可以确定这部分是完成了字符串的拼接工作。

蓝框这部分是反编译后的伪代码。
希望有个师傅能帮着讲解一下怎么从静态分析的角度理解这部分的代码。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
打赏
分享
最新回复 (3)
雪    币: 4178
活跃值: (2146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
UFO 2023-7-31 20:09
2
0

动态调试 + 静态分析 


 if ( sub_406930(g_YourName) >= 4 )  // 检查输入的用户名 长度 必须不小于4

  {

    TString_To_PSTR(*(_DWORD *)(a1 + 476), (int *)&var_10);// 取得输入的用户名: UserName

    nValue *= *(unsigned __int8 *)var_10;

    nValue *= 2;

    InitString(&x5, (__int32)&str_CW[1]);       // 初始化字符串 CW

    InitString(&x1, (__int32)&str_CRACKED[1]);  // 初始化字符串 CRACKED

    sub_406718(nValue, &pShortNum, a1, a4, v5); // 取得  CW-****-CRACKED 样式中的 **** 值

    sub_4039AC(&sValidSerial, 5, x1, (int)&str___5[1], pShortNum, (int)&str___5[1], x5);// 拼成 CW-****-CRACKED 的样式

    TString_To_PSTR(*(_DWORD *)(a1 + 480), (int *)&var_10);// 取得输入的序列号: Serial

    sub_4039FC(sValidSerial, var_10);           // v6 = 比较序列号

    if ( v6 )

      sub_42A170(*off_430A48, "Good job dude =)", "Congratz !!", 0);

    else

      sub_42A170(*off_430A48, "Sorry , The serial is incorect !", "Try Again!", 0);

  }


雪    币: 27
活跃值: (119)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_依然_206 2023-8-1 10:53
3
0
UFO 动态调试 + 静态分析  if ( sub_406930(g_YourName) >= 4 )  // 检查输入的用户名 长度 必须 ...
谢谢师傅添加的注释,有没有可以在不采用动态调试的方法了解到每个函数的作用呀。
想了解一下
雪    币: 4178
活跃值: (2146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
UFO 2023-8-1 11:42
4
1
逆向的目的 就是  快速 理解 目标程序的 执行过程和运算方法,找到关键核心部分。 死磕每个函数怎么运行的细节, 只会丢失目标,迷失自我。你的时间是有限的。 要把有限的时间和精力投入到关键点去。
游客
登录 | 注册 方可回帖
返回