码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 红队专题-REVERSE二进制逆向反编译


    红队专题

    • 招募六边形战士队员
    • 恶意代码分析实战——高级反汇编
    • 恶意代码分析实战——反汇编
    • IL指令
    • 基础定义
      • ROP 链条
      • 栈迁移(Stack Migration)
    • 寄存器
      • 1. 通用寄存器
      • 段寄存器
      • 索引寄存器
      • 状态和控制寄存器
    • 反调试
      • 反调试技术
        • 调试痕迹识别
        • 识别调试器的行为
        • 干扰调试器的功能
    • Mobile
      • APK
      • 亚洲首款交互式Android反编译器
    • APP的登录协议分析
      • 脱壳
    • PWN二进制
      • AFL
      • CPU
    • Mobile
    • Android
      • apk
      • smali
      • Zygote受精卵
    • windows
      • win32
      • SHCore.dll
      • WINMM.dll
      • *comdlg32*.*dll*
    • 工具
      • CFF
      • drozer
      • frida
      • **代码结构**
      • **frida-core**
      • IDA
      • jadx-gui
      • jd-gui
      • xposed
      • Xposed原理
      • Xposed可以做什么?
    • 逆向破解
    • HOOK
    • so 分析
    • 二进制逆向破解
    • Windbg
      • dmp文件介绍
      • pdb文件介绍
      • Windbg基础命令
      • 执行、调试相关
      • 调试辅助相关
      • 漏洞利用相关
    • 逆向基础
      • EIP
      • 1.1 汇编基础
        • x86寄存器
        • ARM寄存器
        • X86和ARM的汇编指令
    • 总论
      • 1.2 常用逆向思路
    • 1.3 工具
        • 1.3.1 二进制编辑器
        • 1.3.2 可执行文件查看工具
        • 1.3.3 格式转换工具
    • x64dbg 2020.06.04 反汇编修改神器
      • x64dbg调试器主要分为三部分载体:
      • x64dbg初步认知
        • 快捷键
    • IDA pro
      • 安装python2
      • 加入环境变量
      • py2安装pip
      • 安装IDA 7.0 pro
      • IDAPython: importing "site" failed.
    • IDA pro 内置调试器
      • 打开安装程序
    • APK反编译工具
      • 工具:
    • C#逆向 反编译工具
      • dotPeek
    • 实战小记
    • Android 反编译逆向调试与安全加固
    • 安卓逆向 初识
      • #了解下 安卓端的 逆向学习框架#
    • 001课 教学内容规划
      • 学习流程
      • 综合基础
    • C++游戏逆向 apk
    • 语言分析
      • 一 、基础知识
          • 1.1 cpu体系架构
              • 1.1-1 RISC和CISC
              • 1.1-2 CPU工作的基本原理
          • push ebp // 实现压入操作的指令
          • POP //实现弹出操作的指令
          • // ESP是堆栈指针 总是指向栈顶位置。一般堆栈的栈底不能动 无法暂借使用
          • MOV指令 //数据传送指令
          • push -0x1
          • F12暂停法 Alt+K
          • F8单步
          • fstsw 可以把状态寄存器读取到一个双字节内存位置或者AX寄存器中
          • fstcw 指令获取当前控制寄存器的值
          • fldcw 指令把 值加载到控制寄存器
          • fstcw 指令检查当前控制寄存器的值
          • ALT+M 内存镜像
          • ALT+E 调用了那些系统模块 该模块的存放地址和文件名
          • 程序领空 OD载入程序 程序本身的代码
          • 系统领空 USE32 程序调用的咱们系统的一个函数模块
          • AX、BX、CX、DX 用于存放数据 数据寄存器
          • EIP CPU下次要执行的指令的地址
          • EBP 栈的栈底指针 栈基址 (ESP传递给)
          • ESP 栈的栈顶。并且始终指向栈顶
    • 恶意代码分析实战-手动脱壳

    在这里插入图片描述

    招募六边形战士队员

    一起学习 代码审计、安全开发、web攻防、逆向等。。。
    私信联系
    在这里插入图片描述

    恶意代码分析实战——高级反汇编

    1.IDA Pro
    IDA Pro是一款交互式的,可编程的,可扩展的,多处理器的,
    交叉Windows或Linux WinCE MacOS平台主机来分析程序,
    被公认为最好的花钱可以买到的逆向工程利器。
    IDA Pro已经成为事实上的分析敌意代码的标准并让其自身迅速成为攻击研究领域的重要工具。
    它支持数十种CPU指令集其中
    包括Intelx86,x64,MIPS,PowerPC,ARM,Z80,68000,c8051等等。



    服务器:Windows 7

    辅助工具:IDA Pro
    在这里插入图片描述


    将会分析 exe文件。先来看看要求解答的问题

    Q1.程序初始化请求的URL是什么?

    Q2. User-Agent 域是如何产生的?
    在这里插入图片描述

    Q3.初始化请求时,程序在内存页中查找什么?

    Q4.程序如何处理它从页中提取的信息?


    在这里插入图片描述

    首先IDA载入分析,从头到尾稍微看下main
    在0040115a遇到了第一个对抗反汇编技术
    在这里插入图片描述

    因为esp值是非0的,所以test指令返回结果一定是非零值
    在这里插入图片描述

    那么下面的jnz指令的跳转是永远成立的

    其跳转的目的是40015e+1

    也就是jmp指令中间的位置,这是有问题的,
    而且IDA将跳转的位置标记为红色,也能说明这里是不正常的

    将光标定位40115e,按d键,将这个指令变为数据
    在这里插入图片描述
    在这里插入图片描述

    然后光标定位到40115f,按c键转为代码
    在这里插入图片描述
    在这里插入图片描述

    这样就正常了。

    继续往下,在4011d0看到了对抗反汇编的技术
    在这里插入图片描述

    这里通过xor给eax赋0,下面的jz指令跳转是永远成立的
    在这里插入图片描述

    jz的目的第4011d4处的call目的地址同样是红色的,说明也是不正常的

    光标定位到4011d4,按d键转数据
    在这里插入图片描述
    在这里插入图片描述

    然后定位到4011d5,按c键转代码
    在这里插入图片描述
    在这里插入图片描述

    之后都是同样的处理,结果如下
    在这里插入图片描述

    继续往下,在401215处也存在对抗反汇编的技术
    在这里插入图片描述

    可以option->general如下设置,用于显示出机器码
    在这里插入图片描述

    如下所示
    在这里插入图片描述

    这是一个双字节的jmp指令。跳转目标是它的第二个字节
    在这里插入图片描述

    按d键转为数据
    在这里插入图片描述
    在这里插入图片描述

    光标定位到00401216,按c键转为代码
    在这里插入图片描述

    继续往下,在401269处存在对抗反汇编技术
    在这里插入图片描述

    这里的jz和jnz指令都是跳转到同一个地址,说明命中目标代码不取决于零标志位的置位与否

    将光标定位到跳转的目标,也就是0040126d,按d键转为数据
    在这里插入图片描述
    在这里插入图片描述

    光标定位0040126e,按c键,转为代码
    在这里插入图片描述

    继续往下,在4012e6位置存在对抗反汇编技术
    在这里插入图片描述

    这里的jz跳转的目的地是4012e8,是向上跳转,跳到mov指令中间的位置。
    这不是正常的跳转,而且和我们之前看到的向下跳转也是不同的

    光标定位到4012ee,按d键转为数据
    在这里插入图片描述
    在这里插入图片描述

    定位到4012ef,按c键转为代码
    在这里插入图片描述

    定位到4012e6,按d键转为数据
    在这里插入图片描述
    在这里插入图片描述

    定位到4012e8按c键转为代码
    在这里插入图片描述
    在这里插入图片描述

    至此,main函数中所有对抗反汇编的地方都被我们调整回来了。

    不过可以看到,还存在一些多余的db字节,
    在这里插入图片描述

    我们需要将其转换为nop指令(0x90),这样才能构造出一个函数

    替换nop,使用脚本就可以自动化进行

    脚本内容如下
    在这里插入图片描述

     #include
    static main()
    {
       
        auto ea = ScreenEA();
        PatchByte(ea,0x90);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意文件后缀名为idc

    来测试一下,定位到0040115e,这里有多余的db字节
    在这里插入图片描述

    然后file->script file
    在这里插入图片描述

    选中test.idc,点击打开即可

    此时已经被修改为90h了
    在这里插入图片描述

    其他地方也是同样如此
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    这样就全部修改完毕了,接着选中全部main函数

    从00401000到0040130e

    然后按p键,再按空格键,就可以图形化地查看生成的函数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在InternetOpenUrlA前调用了sub_401386,跟入
    在这里插入图片描述
    在这里插入图片描述

    可以看到是在将字符拷贝到栈空间里
    在这里插入图片描述

    可以将这些16进制通过按r键进行转换为字符
    在这里插入图片描述

    在这里插入图片描述

    可以看到往栈上拷贝的字符组成的字符串其实是一个网址

    http://practicalmalwareanalysis.com/bamboo.html

    Q1.程序初始化请求的URL是什么?

    A1.程序第一个请求的URL是http://www.practicalmalwareanalysis.com/bamboo.html。




    返回上层函数

    我们就知道了InternetOpenUrlA就是尝试访问这个网站

    为了知道user-agent,我们来分析InternetOpenA
    在这里插入图片描述

    其第一个参数lpszAgent其实就是user-agent

    其值edx来自name,往上回溯
    在这里插入图片描述

    可以看到是gethostname的返回值保存在name中。

    所以我们可以认为user-agent的字符串就是主机名

    我们f5查看伪码继续分析
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    将case里的数字转为字符,更直观一点
    在这里插入图片描述

    可以看到是一个for循环。
    for循环的作用就是将name字符串中的每个字符进行修改:
    如果是Z则修改为A,如果是z则修改为a,
    如果是9则修改为0,如果不是这三种情况,
    则自增,检查下一个

    Q2. User-Agent 域是如何产生的?

    A2. User-Agent 字符串由hostname中
    每个字母和数字加1组成(Z和9对应的是A和0)。




    程序使用InternetOpen初始化,然后使用InternetOpenUrlA打开一个网址
    在这里插入图片描述

    然后是InternetReadFile将数据下载到一个本地缓冲区
    在这里插入图片描述

    缓冲区包含的数据是第二个参数,上图中已经被IDA标记为Buffer

    在004011DA又出现了Buffer
    在这里插入图片描述

    上图中调用了strstr查找一个大字符串中的子串,
    在这里插入图片描述

    这里就是在缓冲区Buffer中查找字符串Bamboo::,
    Buffer里包含从原始的url中提取的所有数据。
    在这里插入图片描述

    如果查找成功,则eax会保存该子串在Buffer里首次出现的位置,
    通过mov指令赋给了Str
    在这里插入图片描述

    Q3.初始化请求时,程序在内存页中查找什么?

    A3.程序在它请求的网页中查找字符串Bamboo::。
    在这里插入图片描述

    上图又是调用了strstr,用来搜索::,如果找到了,
    在这里插入图片描述

    则将地址保存在eax里,而00401212又将0赋给了eax

    其实也就是说将::的第一个:赋0,或者说赋NULL,
    用于终止Bamboo::和::之间的字符串

    0040123e,ecx+8,其实就是Str+8,而Bambo:长度就是8,
    在这里插入图片描述

    那么这里的作用就是让指针跳过Bambo:,指向后面的内容

    在这里插入图片描述

    之后是调用InternetOpenUrlA,其第二个参数就是要打开的url
    在这里插入图片描述

    所以我们就知道了,Bamboo::和尾部冒号之间的数据的目的,
    就是程序要下载的一个网址

    在这里插入图片描述

    调用InternetReadFile将文件保存在文件里
    在这里插入图片描述
    在这里插入图片描述

    文件名称保存在ecx,而ecx来自于Filename,往上回溯
    在这里插入图片描述

    Filename来自eax,而eax是sub_40130f的返回值
    在这里插入图片描述

    跟入该函数
    在这里插入图片描述

    同样有拷贝字符的操作,按r键转换
    在这里插入图片描述

    这里合在一起就是AccountSummary.xls.exe

    这就是文件名称,我们通过InterReadFile下载的文件就是保存在这里

    回到上层函数,继续往下分析
    在这里插入图片描述

    调用ShellExecute函数启动文件
    在这里插入图片描述

    之后程序就退出了。
    在这里插入图片描述

    Q4.程序如何处理它从页中提取的信息?

    A4. 除了搜索字符串Bamboo外,
    程序还查找一个额外的::,它被转换为一个NULL结束符。
    Bamboo与结束符之间的字符串被下载到一个名为AccountSummary.xls.exe的文件中,
    下载完后, 程序运行它



    配套学习资源
    1.《恶意代码分析实战》

    恶意代码分析实战——反汇编

    了解、学习恶意代码对抗反汇编的技术。
    识别恶意代码采用的反汇编技术,并针对性地进行破解,
    结合ollydbg进行分析;
    在此过程中我们还会使用idc脚本辅助我们的分析;
    此外,我们还将学习如何破解程序的加密原理。




    恶意代码分析实战

    本科/专科信息安全专业

    计算机网络、操作系统




    1.IDA pro
    IDA Pro是一款交互式的,可编程的,可扩展的,多处理器的,
    交叉Windows或Linux WinCE MacOS平台主机来分析程序,
    被公认为最好的花钱可以买到的逆向工程利器。
    IDA Pro已经成为事实上的分析敌意代码的标准并让其自身迅速成为攻击研究领域的重要工具。

    它支持数十种CPU指令集其中包括Intelx86,x64,MIPS,PowerPC,ARM,Z80,68000,c8051等等。

    2.OllyDbg
    一个反汇编工具,
    又叫OllyDebug,一个新的动态追踪工具,

    将IDA与SoftICE结合起来的思想,Ring 3 级的调试器,
    己代替SoftICE成为当今最为流行的调试解密工具了。

    同时还支持插件扩展功能,是目前最强大的调试工具。




    服务器:Windows 7

    辅助工具:IDA pro,Ollydbg




    本次实验我们将会分析 exe文件。先来看看要求解答的问题

    Q1.恶意代码怎样被初始化调用?

    Q2.恶意代码都做了什么?

    Q3.恶意代码使用了什么URL?

    Q4.恶意代码使用了什么文件名?




    首先使用IDA分析

    查看imports窗口
    在这里插入图片描述

    看到了可疑函数URLDownloadToFile,WinExec
    在这里插入图片描述

    再通读一下main
    在这里插入图片描述
    在这里插入图片描述

    调用上图的函数给当前进程创建快照
    在这里插入图片描述

    而后是一个循环结构
    在这里插入图片描述

    里面调用了ProcessFirst

    在这里插入图片描述

    对应地,在循环的下面调用了Process32Next

    其组合使用可以用于列举当前进程

    如果真是这样的话,我们发现的那些导入函数就没有意义了。

    我们回到main开始处
    在这里插入图片描述

    前两条指令将40000h和0x148c进行 或操作,
    结果为0x0040148c,将其保存在eax

    之后该值赋给ebp+4
    在这里插入图片描述

    打开od,直接跳到40100c
    在这里插入图片描述
    在这里插入图片描述

    然后下断点,执行过来
    在这里插入图片描述

    在这里插入图片描述

    接着单步执行到401016
    在这里插入图片描述

    此时ebp值如上所示,我们在堆栈窗口中跟随
    在这里插入图片描述

    ebp+4是0012ff50

    可以看到是指向main函数的返回地址

    那么我们就清楚了,
    这三条指令的作用就是将main函数返回地址覆盖成0040148c,
    这样就可以执行0040148c后的指令了

    Q1.恶意代码怎样被初始化调用?

    A1.通过覆盖main函数的返回地址,初始化调用恶意代码。




    回到IDA直接跳到0040148c
    在这里插入图片描述

    如下所示
    在这里插入图片描述

    可以看到是一段孤立的代码,IDA没能将其识别为函数的一部分

    option->general显示机器码,方便分析
    在这里插入图片描述

    注意到00401494处存在对抗反汇编的技术
    在这里插入图片描述

    其上一条的指令给eax赋0,使用jz会一直成立。
    跳到401496+1,即401497,

    也就是5字节jmp指令的第二个字节,这是不正常的

    光标定位到00401496,按d键转为数据
    定位到00401497,按c键转为代码
    在这里插入图片描述

    正确反汇编后的结果如上
    继续分析

    在这里插入图片描述

    在004014b3看到了printf,用于打印上面的字符串,
    不过这是永远也不会执行的
    在这里插入图片描述

    因为在其之前,可以看到创建了一个异常处理例程。xor指令会给ecx赋0,而div则会将ecx做除数,从而引发除零异常。此时就会跳到4014c0
    在这里插入图片描述

    而我们看到IDA没有将此处的数据识别为代码,而是将其作为DWORD进行表示。

    光标定位到004014c0,按c键转为代码
    在这里插入图片描述

    继续往下分析
    在这里插入图片描述

    004014c0到004014d7用于从链中摘除异常处理例程,
    并从栈中删除了记录。
    在这里插入图片描述

    004014d7存在对抗反汇编技术,IDA将其目的地址也标记为红色

    光标定位到004014d7,按d键
    在这里插入图片描述

    光标定位到004014d8,按c键转为代码

    在这里插入图片描述

    接着继续分析
    在这里插入图片描述

    这里调用了URLDownloadToFile
    在这里插入图片描述

    其第二个、第三个参数分别为url,文件名

    而对应在上图,则是unk_403010,unk_403040

    跟入任一个可以看到
    在这里插入图片描述

    这些数据不是以ascii文本显示的

    004014eb,004014f8
    两处调用sub_401534时
    注意到传入的就是unk_403010,unk_403040

    所以我们推测,sub_401534是解密函数
    在这里插入图片描述

    跟入该函数
    在这里插入图片描述

    这里一个循环结构,最重要的就是箭头所指的xor语句,
    将缓冲区中的每个字符与0ffh异或从而修改他们

    知道了解密的原理,我们就可以编写一个脚本帮助我们解密内容了
    在这里插入图片描述

    file->script file,选择该脚本,解密后如下所示
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    设计模式-单例模式
    丰田工厂停产竟然因为磁盘...
    SOA:整车架构下一代的升级方向
    回归测试选择用例,看这里就可以了。
    PCB铺铜的优点与缺点
    js调用(前/后)摄像头,截取照片,关闭摄像头
    unity2d小游戏
    Sass/Scss、Less 是什么?
    OSError: [WinError 1455] 页面文件太小,无法完成操作
    普惠联接,让人类诗意地栖居在大地上
  • 原文地址:https://blog.csdn.net/qq_33608000/article/details/133745292
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号