初探鸿蒙应用逆向分析
0. 概述近年来,鸿蒙应用开发新兴起来,所以本文借一道鸿蒙应用Demo梳理一下鸿蒙的应用程序的逆向方法。
鸿蒙的定位不是替代安卓,而是实现万物互联。鸿蒙OS是一款面向万物互联新时代的、全场景、分布式的操作系统,实现OS与 硬件解绑、生态共享、跨端共享等。
1. 实战-SU_Harmony题目附件为hap包。
1.1 HAP包那么什么是hap包呢? (类比APK包)
官方文档解释如下:
HAP(Harmony Ability Package)是应用安装和运行的基本单元。HAP包是由代码、资源、第三方库、配置文件等打包生成的模块包,其主要分为两种类型:entry和feature。
entry:应用的主模块,作为应用的入口,提供了应用的基础功能。
feature:应用的动态特性模块,作为应用能力的扩展,可以根据用户的需求和设备类型进行选择性安装。
应用程序包可以只包含一个基础的entry包,也可以包含一个基础的entry包和多个功能性的feature包。
跟APK相似,所以,我们将hap文件解压。
逆向hap包,我们需要关注这里面的 ./ets/modules.abc 和 ./ ...
2025西湖论剑初赛唯一RE题WriteUp
0. 概述本次西湖论剑revere分区只有一道题目,并且没有附件,只给了个纯靶机。。。
。。。。
思路:对于无附件的题目,我们采取通过回显来判断出题人意图,从而得解的方式。
1. 测试题目无附件,只给了个靶机
名字叫bitdance
连接靶机,发现只有个长度回显,所以我们首先测试长度,看长度正确回显
测试得知,flag_len = 96
2. 求解回显比较长,我们把回显报存到文件中
12345678910111213141516171819202122232425262728293031323334353637383940414243444546HOST = '139.155.126.78' # 这里请替换为目标主机的真实地址PORT = 19315 # 这里请替换为目标服务的真实端口TIMEOUT = 15 # 设置超时时间def test_input_length(length, filename=None): """尝试发送特定长度的输入""" try: # 创建一个远程连接 with remote(HOST, ...
软件系统安全逆向分析-混淆对抗
1. 概述在一般的软件中,我们逆向分析时候通常都不能直接看到软件的明文源代码,或多或少存在着混淆对抗的操作。下面,我会实践操作一个例子从无从下手到攻破目标。
花指令对抗
虚函数表
RC4
2. 实战-donntyousee
题目载体为具有漏洞的小型软件,部分题目提供源代码,要求攻击者发现并攻击软件中存在的漏洞。
2.1 程序测试首先拿到这道题目,查壳看架构,elf64
放到虚拟机中运行一下
123plz input your flag8888888888888wrong
ida64反编译,发现软件进行了去符号处理,最直白就是没有main()函数。
但是ida自动帮我们定位到了系统入口函数start()。
然后我们查字符串 plz、wrong,均无法查到相关字符串
可见程序对静态分析做了很大的操作,防止一眼顶真。
然后我们回到系统入口函数start,F5反编译。
程序无法完全反编译,并且发现init和fini均无法正常识别。
进入main函数,即sub_405559(),无可用信息。
2.2 花指令对抗看汇编
很明显,程序做的混淆对抗是加了花指令。
花指令实质就 ...
PE文件结构+实验
0. 概述深入解析PE文件结构学习笔记,文中不乏笔者自己的理解,如有错误,欢迎指正。Orz
1. 啥是PE?PE文件,即Portable Executable File Format,是Windows下可执行程序的一个统称,Windows下的所有可执行文件都是PE文件格式,比如.exe,.dll,.sys等。
PE文件是指 32 位可执行文件,也称为PE32。64位的可执行文件称为 PE+ 或 PE32+,是PE(PE32)的一种扩展形式(请注意不是PE64)。
PE文件由PE头和PE体组成,而非只有头部。
PE结构不是一个单纯的结构,一个PE文件由若干个结构集合所构成,不同的结构有不同的用处。
PE文件格式是一种对文件组织管理的方式。
来张图助助兴,如下图所示=。=
2.PE文件结构概述2.1 PE文件结构一般分为4个部分:
DOS头:DOS头是PE文件结构的第一个头,用来保持对DOS系统的兼容,并且用于定位真正的PE头。我们关注的主要是两个属性:e_magic (MZ标识)和 e_lfanew(定位真正的PE头)。
NT头:包括PE文件标识、PE文件头和可选头。包含 wind ...
LLVM IR研究分析
前置知识
LLVM是C++编写的构架编译器的框架系统,可用于优化以任意程序语言编写的程序。
LLVM IR可以理解为LLVM平台的汇编语言,所以官方也是以语言参考手册(Language Reference Manual))的形式给出LLVM IR的文档说明。既然是汇编语言,那么就和传统的CUP类似,有特定的汇编指令集。但是它又与传统的特定平台相关的指令集(x86,ARM,RISC-V等)不一样,它定位为平台无关的汇编语言。也就是说,LLVM IR是一种相对于CUP指令集高级,但是又是一种低级的代码中间表示(比抽象语法树等高级表示更加低级)。
LLVM IR即代码的中间表示,有三种形式:
.ll 格式:人类可以阅读的文本(汇编码) –>这个就是我们要学习的IR
.bc 格式:适合机器存储的二进制文件
内存表示
下面给出.ll格式和.bc格式生成及相互转换的常用指令清单:
12345.c -> .ll:clang -emit-llvm -S a.c -o a.ll.c -> .bc: clang -emit-llvm -c a.c -o a.bc.ll -> ...
MFC框架软件逆向研究
MFC框架简介什么是mfc?
MFC库是开发Windows应用程序的C++接口。MFC提供了面向对象的框架,采用面向对象技术,将大部分的Windows API 封装到C++类中,以类成员函数的形式提供给程序开发人员调用。
简单来说,MFC是一种面向对象,用于开发windows应用程序的框架,突出特点是封装了大部分windows API,便于开发人员使用(写win挂方便)。
MFC程序的运行过程分为以下四步:
利用全局应用程序对象theApp启动应用程序。
调用全局应用程序对象的构造函数,从而调用基类(CWinApp)的构造函数,完成应用程序的一些初始化工作,并将应用程序对象的指针保存起来。
进入WinMain函数。在AfxWinMain函数中获取子类的指针,利用指针实现上述的三个函数,从而完成窗口的创建注册等工作。
进入消息循环,一直到WM_QUIT。
那么问题来了,我们如何逆向mfc程序呢?因为其封装了大部分windows API,逆向起来也复杂了不少,因为需要了解大量的windows api 并且熟悉windows编程。下面进行讲解。
MFC如何逆向如下图,是MFC框架软件 ...
游戏安全入门-扫雷分析/远程线程注入
前言无论学习什么,首先,我们应该有个目标,那么入门windows游戏安全,脑海中浮现出来的一个游戏 – 扫雷,一款家喻户晓的游戏,虽然已经被大家分析的不能再透了,但是我觉得自己去分析一下还是极好的,把它作为一个小目标再好不过了。
我们编写一个妙妙小工具,工具要求实现以下功能:时间暂停、修改表情、透视、一键扫雷等等。
本文所用工具:
Cheat Engine、x32dbg(ollydbg)、Visual Studio 2019
扫雷游戏分析游戏数据在内存中是地址,那么第一个任务,找内存地址
打开CE修改器
修改时间->时间暂停计数器的时间是一个精确的值,所以我们通过精确数值扫描出来,游戏开始之前计数器上的数是0,所以我们扫描0。
时间在变化,选择介于什么数值之间再次扫描
可得 0x100579c — winmine.exe+579C
我们发现这个数据都是直接通过基址 + 固定偏移能直接得到的。
然后我们对这个数据去找出 是什么改写了这个地址,得到一个指令和指针:
时间:0x100579c
修改表情 - 没啥用修改表情这个功能怎么搞我觉得还是很容易想到的,这个按钮的作用是重新 ...
记由长城杯初赛Time_Machine掌握父子进程并出题
前言 掌握一道题目的最好办法就是由做题人变成出题人()
本文所说的题目是长城杯某区逆向Time_Machine,题目反编译纯gs,所以本文主要讲解笔者出的题目
:笔者出的题目准备给iscc擂台的,但是没轮上(感觉擂台被控了,怎么说hh)
出题思路额,不算是思路,站在前人的肩膀上罢了。出这道题目的初心是因为比赛的时候用心的做了这道题写了出来感觉收获颇多,但当时只局限于写了出来,并不能全面理解,所以有了这么一个想法。俗话说,实践出真知,熟能生巧,自己去亲手实操将题目敲一遍写一遍,对一个知识点理解的才到位,记忆也更加的深刻。主要加密算法是使用 SuperFastHash 算法对flag逐字节进行哈希处理,然后通过改变环境变量来进入不同的分支,分支里面对内存进行复写和触发异常来实现父子进程的交互,子进程是一大坨代码块,通过以下指令块控制父进程调试子进程实现加密。
12345movabs r11,%dxor r11,0x1337ror r11,13movabs r13,1 #0或1ud2
程序分析程序是64位的exeida64分析拖入ida64后映入眼帘,有一个小的主函数,用于检查环境变量的值 ...
2023强网杯WriteUp
前言2023-12-18创建的文件夹,搁到现在才上传,忘了,麻麻了
rev === 强ollvm杯
babyreTls附加dbg
过掉
把程序运行,在这儿附加
静态密文,key都是假的
动调起来得到真的
密文
Key
这是delta
调到跳出循环,得到sum
Exp
12345678910111213141516171819202122232425262728293031323334353637#include <iostream>#include <cstdint>void XTEA_decrypt(uint32_t v[2], uint32_t const key[4]) { unsigned int i; unsigned int sum = 0xd192c263; uint32_t v0 = v[0], v1 = v[1]; for (int j = 0; j < 4; j++) { for (i = 0; i < 33; i++) { sum -= 0x88408067; v1 -= (key[(su ...
2023楚慧杯初赛WriteUp
前言这周末,四级英语考试,强网杯,楚慧杯,还通宵打强网,我滴妈,差点猝si =。=
然后这篇写的楚慧杯的,就重点说(吐槽)一下
vocal,就3个小时的比赛,还得比赛结束前交WP,写了re1,misc1,misc2,0.o真的极限=。=
楚慧杯学生组
还好,收获满满,强网先锋应该够了,楚慧杯也晋级了,四级的话,阿巴阿巴 =。=
revbabyre - ollvm/tea?xtea打完强网库库打ollvm,这玩意又来
好好,周末就ollvm大赛
D810去混淆
D810是插件 搜到直接用 前提:angr要装好
main函数
Encode 离谱,我去玩ollvm脚本没跑出来
然后我没去ollvm改了一下跑出来了,vocal
这个是去ollvm
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960#include <stdio.h>#include <stdint.h& ...