[card title="拿到一道逆向题" color="info"]
Step1PEID查壳
看二进制文件是否加壳 → 比较难
如果没有加壳:静态、动态
静态分析:windows下的 IDA PRO
动态: windows下的 ODlinux下的 EDB、GDB
Step2逆向
1.破解类
2.算法分析(综合性稍强,看懂核心代码,知道字符串如何进行比较)
3.绕过(难度稍大)
驱动保护、代码混淆、反破解
常用语言
C(ida看到的一些名称空间的比较多、一些库)、C++
在逆向代码时,时刻关注"关键代码",即从输入开始,获取flag的部分代码
关键代码特征:

  • 运算:对输入进行处理与或非亦或等
  • 循环:一定有比较、跳转、变量的变化(对字符串的处理一定是循环)

一个代码既有循环又有运算 → 一定是关键代码
ida中shift + f12,找关键代码段
比如:报错、让你输入的信息
如果找不到关键代码,也可以设置API断点。一定会有处理你输入的东西。比如,接受完你的输入后的代码

来自360doc.com
[/card]

逆向入门

file.zip
虽然题目叫逆向入门,但是我觉得像一道解密题

  • 解压后用ida打开,发现是一张图片的base64编码,那么直接复制进入浏览器搜一下,得到

入门逆向

入门逆向.zip

  • 解压后用ida64打开,对字符串按R依次转换,如下

[photos]


[/photos]


signin

sign_in.zip
用到AndroidKiller反编译
链接: https://pan.baidu.com/s/1dI3XH73ZUaR19mUeedrW3w
提取码: 51x5

  • 解压后用AndroidKiller打开

[photos]

[/photos]

  • 看看Java源码

[photos]

[/photos]

paramString.equals(new String(Base64.decode(new StringBuffer(getFlag()).reverse().toString(), 0)))
  • 获取getFlag() → reverse()反转字符串 → base64解密
private String getFlag()
  {
    return getBaseContext().getString(2131427360);
  }
  • 发现给出资源管理分配id2131427360,在R.class中find看看

  • 发现是toString转成字符串,在整个文件中找一找

<string name="toString">991YiZWOz81ZhFjZfJXdwk3X1k2XzIXZIt3ZhxmZ</string>
  • 接着反转它,得到ZmxhZ3tIZXIzX2k1X3kwdXJfZjFhZ18zOWZiY199,base64就可以了