咖喱忍者

导航

OD的使用

Ox01 动态分析

1. Reverse000.exe

  • 找main函数

    • 进入OEP,发现2个CALL
    • 第一个一般为Check函数
    • 第二个则为系统main函数
    • image.png
    • image.png
    • 进入后找 Debug版本的push,push,push,call
    • image.png
  • 进入main,运行程序

    • 发现失败时会返回
    • 则手动将函数退出
    • 强跳至函数入口处
    • 手动实现循环函数

image.png

image.png

  • 找关键跳,向上观察关键判断

    • 分析关键判断处为EAX
    • 表示为上一个函数返回值
    • 断点至函数入口
    • image.png
    • 进入关键函数,发现有判断
    • 断点至判断,得出结果
    • " i love this game"
    • PS:结果为0x20开头,表示空格

image.png

image.png

  • END

2. Reverse001.exe

  • 找到main函数,分析代码

  • 找到关键跳,向上找判断

    • 发现失败则弹窗
    • 弹窗后直接调用pause退出
    • 那我们在pause加jmp强跳
    • 实现手动循环代码

image.png

image.png

image.png

  • 实现循环后设置断点在关键跳位置

    • 查看寄存器内存状态
    • 发现EDX=我们输入的字符
    • 则判断EDX==0x32,查表得2
    • 则表示密码的值为2

image.png

  • 尝试输入2A,断到关键跳

    • ECX为我们第2个输入的字符
    • 比对0x73=s
    • 则表示第二个字符为s
    • 连起来则表示 "2s"

image.png

  • 多次判断关键跳

    • 得到字符串"2s83gr3ky3kw3hdq"
    • 输入则弹窗成功。

image.png

  • END

3. Reverse002.exe

  • 找main函数

    • 发现大体流程与上文相似
    • 如上文思路手动添加循环
    • PS:call实际上会压入1个返回值,需要手动释放一下
    • 虽然上文01.exe中没释放好像也没崩溃,这次我们将它释放
    • image.png
  • 找关键跳,下断

    • 发现第一处关键处为不等于0x33则跳
    • 猜测代码是将第一个字符做判断,如果是0x33则失败
    • image.png
  • 第二次关键跳

    • 按F8则发现执行到928C4B处的二次关键跳
    • 此时代码为 EDX==0x31则跳
    • 那么分析可得处第一个字符为0x31=1
    • 为什么是第一个字符呢?
    • 首先我们断点到928C4B处,发现EDX还是我们
    • 输入的第一个字符,表示没有变
    • 其次,观察上文代码,EDX赋值时,ECX为0所以并没有后移
    • image.png
  • 第三次关键跳

    • 步骤如第一次跳一致,发现是不等于0x31则跳
    • image.png
  • 第四次关键跳

    • 步骤如第二次跳一支,标识第二个字符为0x73(s)
    • image.png
  • 后续关键跳如上

    • 得出结果为"1sh6gr6ky6kw6hdq"
    • image.png
  • END

4. Reverse003.exe

  • 找main函数

    • 发现弹窗逻辑如上,手动添加循环强跳
    • image.png
  • 找关键跳

    • 00528C11处有jge跳,大于或等于7时跳
    • 将16进制表设置成 ebp-8C
    • 会发现,此处数值正好为字符串长
    • 则可以猜测上两行代码为调用求长函数
    • 分析可得 密码长度≥7
    • image.png
  • 第二处关键跳

    • 断点至00528C56,发现条件为ecx≠68则跳
    • 将16进制区设置为ebp+eax-81,发现字符串为7
    • 猜测此处判断为字符串结尾是否为 h
    • 再次尝试字符串 "123456h"
    • image.png
  • 第三处跳

    • 断点至此,发现为ecx≠edx则跳
    • 查看右侧寄存器表,猜测此处判断为
    • 第一个字符和末尾字符不相等则失败
    • 则可继续尝试字符串"h23456h"
    • image.png
  • 第四处跳

    • 断点至此,发现ecx为第二个字符,且≠1则跳
    • 继续尝试字符串"h13456h"
    • image.png
  • 关键跳5

    • 断点至此,发现逻辑如上,判断ecx、eax
    • 发现数据为第2位和倒数第2位字符串比较
    • 继续尝试"h13451h"
    • image.png
  • 关键跳6

    • 如上逻辑可得第三位字符串为2
    • 继续尝试"h123421h"
    • image.png
  • 关键跳7、8、9、10

    • 逻辑同上,可得出字符串为回环文
    • 尝试字符串"h123j321h"
    • image.png
    • 得出结果
    • image.png
  • END

5. Reverse004.exe

  • 找main函数

    • 逻辑如上,如果弹窗失败则退出
    • 手动设置循环强跳,防止退出
    • PS:上文使用add esp,0x04修复栈
    • 此处使用pop修复栈
    • image.png
  • 找关键跳

    • 尝试输入用户名和密码,逐步分析
    • 先尝试断点至MessageBoxW返回处,查找是哪个分支调用了退出
    • 得到分支,下断最近的关键跳
    • image.png
    • 再次输入用户名密码,可得ecx=用户名第一位字符串=h
    • 再次尝试"hABC","1234"
    • image.png
  • 关键跳2、3、4、5、6、7

    • 在上部基础上断点至 关键跳1,按F8逐步执行
    • 执行至je时,发现此处为关键跳2,条件为ecx==8
    • 快速浏览下文内容,可连续得出用户名为跳前判断的值
    • 尝试用户名"h8g2ywh","123456"
    • image.png
    • image.png
  • 关键跳8

    • 断点至此,比较条件edx≠eax则跳
    • 浏览右上角寄存器值,发现比较为a≠1
    • 1是我们的密码第一位,那a呢?
    • 向上查找发现:有代码将用户名第一位赋值为a
    • 尝试"h8g2ywh","a23456"
    • image.png
  • 关键跳9、10、

    • 断点至此,发现比较了ecx≠8
    • 按关键跳8分析可知此处的8来自用户名的第二位
    • 则无需着力分析,查看下文发现有关键跳10
    • 表示第二位密码为3,查看下文,相同逻辑得出
    • 尝试"h8g2ywh","a3ory"

image.png

image.png

image.png

  • END

6. Reverse005.exe

  • 找main函数

    • 手动修改循环,防止退出
    • 本次修改system("pause");函数入口点
    • image.png
    • image.png
  • 找关键跳

    • 如上所示,断点在MessageBoxW返回处,得到分支
    • image.png
    • 断点至关键跳1,得到用户名第一位=a
    • image.png
  • 关键跳2、3、4、5、6、7

    • 同一逻辑得出用户名“a16slea”
    • x64dbg,按G可显示图标

image.png

image.png

  • 关键跳8

    • 得到用户名后,则进入密码判断
    • 在关键跳7处按F8得到关键跳8
    • 分析可得密码第一位=b
    • image.png
  • 关键跳9、10、11

    • 相同逻辑可得密码"b3or"
    • image.png
  • image.png

  • END

7. Reverse006.exe

  • 找main函数

    • 同上设置手动循环,防止退出
    • 通过system("pause");返回地址得出分支,下断
    • image.pngimage.png
  • 关键函数1

    • 压入了我们输入的字符串
    • image.png
    • image.png
    • image.png
    • 断点至关键跳时,查看eax返回值为我们密码的长
    • jae为高于等于则短跳,分析可得密码长≥6。
  • 关键跳2

    • 由关键跳1可得关键跳2为je
    • 分析可得密码第一位=a
    • image.png
  • 关键跳3-10

    • 同逻辑可得密码"a16slejwf"
    • PS:注意多次循环,才跳出

image.png

image.png

  • END

8. Reverse007.exe

  • 找main函数

    • 同上设置手动循环,防止退出
    • 设置system("pause");断点,得到分支
    • image.png
  • 关键跳1-6

    • 通过上文逻辑可得用户名"12gel4"
    • image.png
  • 通过下文可直接分析处密码为"15pb"

image.png

  • END

9. Reverse008.exe

  • 找main函数

  • 找关键字,发现

    • 用户名为"15pb"
    • 密码为"ddd"

image.png

image.png

  • END

Ox02 MFC分析

  1. MFCPj000.exe
  2. MFCPj001.exe
  3. MFCPj002.exe
  4. MFCPj003.exe
  5. 开动脑筋.exe

posted on 2020-11-26 20:20  咖喱忍者  阅读(190)  评论(0编辑  收藏  举报