拿到逆向题目步骤: 第一步: PEID查壳 看二进制文件是否加壳--》比较难 如果没有加壳:静态 、 动态 静态分析:windows下的 IDA PRO 动态: windows下的OD linux下的EDB、GDB 第二步: 逆向: 1.破解类: 2.算法分析: 综合性稍强(看懂 核心代码,,知道字符串如何进行比较) 3.绕过:(*难度稍大) 驱动保护、代码混淆、反破解
常用语言: C(ida看到的一些名称空间的比较多、一些库)、C++(比C难) 在逆向代码时,时刻关注:“关键代码” 关键代码:从输入开始,获取flag的部分 关键代码特征: 1运算:对输入进行处理与或非亦或等 2循环:一定有比较、跳转、变量的变化(对字符串的处理一定是循环) 一个代码既有循环又有运算 -> 一定是关键代码 我们:快速找到关键代码并对其分析 ida:shift + f12 :找关键代码段 比如:报错、让你输入的信息 如果找不到关键代码,也可以设置API断点。一定会有处理你输入的东西。比如,接受完你的输入后的代码 接下来,用一道题目来解析 (先给大家介绍 动态 (工具:OD、记事本、计算器(作十进制、十六进制的转换)))
首先“Please give your passcode:” 这个东西也可以算是一个关键的代码 输入完就关了 这意味着:我能看到的信息就是这样子 首先查壳(此步省略,因为提前知道没有加壳) OD下进行分析 第一步“中文搜索”、智能搜索 再一步: ctrl + f 这个就是我的 关键信息 如果我的输入正确,则会执行这一步 双击“请输入你的 passcode” 就会 跳到 那一步 我们看到了%20s %20s下面紧接这的就是 scanf函数 说明输入字符传的类型,最长 20位 然后我们开始下断点 为什么在scanf下设置断点 因为scanf函数调用完后,就会停下来接受你的输入 双击 机器码 即可 设置断点 断点设置好后,就可以运行这个程序 我们输入 1234567890 回车 程序就会停在这一行 接下来就 单步 向下 这里很重要 move 这个操作 就是 赋值 为 0 state的信息也需要看,是否有没有输入 这是一个跳转,我们跟着跳 跳到这里,发现在做一个 比较 这就是比较关键的信息了 在和15 做比较 如果小于等于15 就跳到这里 如果<> 这就是典型的循环,有各种各样的运算 循环的变量应该是16次0-15 接下来 就看 循环 里作什么事情 单步向下 这是一个变量的赋值 然后又是一个跳转 调到了 一个 比较 这是 0 和3 在做 比较 <> 又回到jump的下一行 大概代码: 这是两次跳转的大致的外围结构。 上篇先简单写到这里,作为入门基础,还请大家预习汇编指令、数据结构,才能更深入的学习逆向。 明天发中篇,将本题的重点,以非常详细的思路写出OD的动态操作。 上篇终。 |
|
来自: 西北望msm66g9f > 《编程》