飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2095|回复: 1

[原创] Windows 下的逆向分析-初探

[复制链接]
  • TA的每日心情
    开心
    2019-3-15 11:00
  • 签到天数: 262 天

    [LV.8]以坛为家I

    发表于 2022-10-15 18:37:49 | 显示全部楼层 |阅读模式
    本帖最后由 梦幻的彼岸 于 2022-10-15 19:25 编辑

    环境信息
    系统信息:Windows11
    涉及工具:Visual studio 、x64dbg
    测试代码:

    1. #include <stdio.h>
    2. int main()
    3. {
    4.     int a;
    5.     printf("Please input a number:\n");
    6.     int x = scanf_s("%d", &a);               //这不是将a的值赋给x,而是用来判断
    7.     //这是定义一个整型变量 x,scanf_s是输入一个值a,当你输入一个整型值,就会得到x = 1(判断为真);而当你键输入一个字符或其他不符合条件的内容时,就会得到x = 0(判断为假)

    8.     printf("%d\n", x);
    9.      if (a % 5 == 0 && a % 7 == 0 && a >1 && a <200)                        /*判断该数是否能同时被5和7整除并且a大于1小于200*/
    10.             printf("yes\n");                                /*如果能,则输出yes*/
    11.     else
    12.             printf("no\n");                                    /*如果不能,则输出no*/
    13.     return 0;
    14. }
    复制代码

    游戏规则
    输入一个数值,使其终端返回出如下信息:
    1. 1
    2. yes
    复制代码

    备注:正常输入140即可满足需求
    打破规则
    输入不符合条件的内容,也可满足需求
    示例思路:
    程序运行后,会输入一段字符串
    767964_87G57C9GJEN33PU.jpg
    之后用户开始输入,判断后返回一些内容。
    767964_2JW54E477HCW6D8.jpg
    正常流程输出的字符串代码会在判断代码之前,并很有可能在一个区域,可测试根据这一段字符串定位到判断代码区域。
    验证:
    如下设置,会在Enyry Breakpoint 处断下
    767964_SCKNVJ3NXDYFQQM.jpg
    点击运行按钮让程序继续运行
    767964_2S88A4PQ4KXV44P.jpg
    此时返回x64dbg界面,搜索程序加载的字符串信息
    767964_77E8M2PBEWBY8EJ.jpg
    结果
    767964_TW7NJWNKRADPUZZ.jpg
    鼠标左键双击进入,此时看到了一些判断流程
    767964_4R2K22DUP5EN4Q6.jpg
    鼠标滚轮上滑可看到此功能区域的入口点(sub)
    sub上有多个int3,判断此为call调用的地址
    767964_TCEHFZG7A7AFN42.jpg
    下断点
    767964_TQ8Y8DXGDQYDWY7.jpg
    重新加载程序
    767964_A8KVRTHWZ2YMKAB.jpg

    运行到下断点的地方
    767964_TGGD8XB9FWXHNMW.jpg
    在Call、判断指令下断点用于分析
    767964_5XF2JRPGTQWBX4F.jpg
    lea 指令:取偏移地址7FF7D3DA2260发送到寄存器RCX
    767964_JRUHUS8F93SHZTK.jpg

    767964_5SSV7GZ74VGD4JD.jpg

    单步运行,看到此Call过后终端输出了如下字符串
    767964_XF3XDENFBWS2XT6.jpg
    此Call后终端可输入数值
    767964_3ADYJPHFTPMAG3Z.jpg
    确认后
    767964_G3WVN3ABKFZTMXM.jpg
    Call寄存器信息
    767964_A6P52W48UCXJZX3.jpg
    Call后返回1
    767964_27MCRJJNRY68JKZ.jpg
    重新运行,输入不满足条件的值对比
    Call寄存器信息
    767964_PJ8V8UBUP2URG8H.jpg
    Call后返回0
    767964_PJ2AN2YPEKCX7VP.jpg
    差异
    RAX不同
    重新运行并输入不满足条件的值,并更改rax信息为1
    选中RAX或对应的值并右键
    767964_HNYRHMRET87V98A.jpg
    修改
    767964_3JUY8CBHGNDC2FY.jpg
    Call运行后看到已返回1,已打破一条规则
    767964_9KZ9JFZXGVCCZ25.jpg
    继续运行后看到如下判断情况
    767964_VP9FAYPCAAPCWVA.jpg
    判断:根据显示的指令执行流程判断,若两个jne指令不跳转并jbe跳转就可返回yes
    右键编辑指令,使其不起作用
    767964_DD4FT4W8FQ4BQTA.jpg
    767964_R4QM8A6ZKWCN4HF.jpg
    修改指令
    767964_VJVEQ4B7CVBGGRX.jpg
    767964_6S5P4ABNKQY6UJ7.jpg

    修改完后
    767964_DJWPMD8QHF97CBH.jpg
    运行验证

    767964_9Y7UJHERBYMRBK8.jpg
    本篇文章,到此告一段落,有缘再会。


    PYG19周年生日快乐!
  • TA的每日心情
    难过
    前天 08:57
  • 签到天数: 527 天

    [LV.9]以坛为家II

    发表于 2022-10-16 21:30:49 | 显示全部楼层
    看不太懂,但也非常感谢楼主的分享!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表