先用Exeinfo PE来检测是多少位,是否带壳

 看见是带UPX压缩壳我们用upx脱壳工具来进行,将该文件移入upx文件夹

在上方写cmd进入指令板;

 输入上面的指令.\upx.exe -d .\ez_re.exe显示;

 这里应显示

Unpacked 1 files.(我是提前就解码了),获得没有壳的文件;

 用ida64位打开,按下tap键,可以看见源代码;

 

我们来分析源代码的逻辑:从_main()函数中的scanf函数开始分析;

S要进行两次加密一次是在for循环进行f3加密,后在进行funs加密;

我们要检查一下这两个加密代码先看f3;

 发现是将输入的字符串顺序颠倒;

我们写一个脚本(这里不要忘记for循环,因为我忘了😂);

 在偶数次循环之后倒置的情况消失了;

 算是没加密;

我们再看func加密算法

 当你了解base64算法,就明白他是base64加密,

应为有个明显的标志,就是绿色字符串

我们可以想想为什麽解码后就是flag,

可以看到在strcmp是比较s与a,

再往上看发现a也进行过base64加密,

那我们将a加密字符串获取出来

我们用base64解码工具解码(网上有)

 获取到a的源字符串

HDCTF{Y0u_h@v2_/\/\@57er3d_7he_r3v3rs3}

把这个当作s再进行一次base64加密,可以与a相同

则HDCTF{Y0u_h@v2_/\/\@57er3d_7he_r3v3rs3}为flag

 此题已解;

 

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐