Android-几个简单app的登录逆向
几个简单app的登录逆向以下app都是来自小肩膀2022安卓逆向课程的案例。
一、今日镇江1、升级弹窗去除打开弹出升级框,不想升级所以直接给他干掉。
两种方法:
1、找到获取版本的地方,hook改变返回值使得本地app版本和远程服务器app版本一致,经过比对后就不会弹出该提示框。
2、直接找到弹框部分,给该部分直接用hook给nop掉。
这里直接使用第二种方法。
这个app没有字符串加密,所有首先jadx搜索字符串”升级提示”,定位到strings.xml中的
1<string name="update_info">升级提示</string>
之后继续搜索update_info找到弹框的部分定位到如下函数,直接frida替换整个函数并且使用spwan模式启动时注入。
1234567Java.perform(function(){ var ActivityUtils = Java.use("com.cmstop.cloud.base.ActivityUtils"); ActivityUtils.c ...
Android-frida_root检测
frida_root检测在hook的时候,要想使用frida进行hook注入,就需要启动frida-server(server注入方式),而该server需要adb具有root权限,所以一些app会防止被hook而做一些frida检测或root检测。
常规的frida检测方法参考自:安卓逆向之过frida检测总结版_android frida-CSDN博客和Frida检测 - huolong blog
1、检测文件和进程名
默认的frida-server会在/data/local/tmp目录下,因此app可以检测该目录下有没有frida的特征文件,对于这种检测可以给frida-server文件重命名,或者hook一些**fopen()和strstr()**函数来绕过他比对文件名的代码即可。
较老版本的frida会在运行后会在/data/local/tmp/目录释放一个名为re.frida.server/frida-agent-64.so的文件,不过新版本已经改进了这一问题。
2、检测端口frida-server启动后默认会在27042端口监听,可以通过检查该端口是否被占用的方式来 ...
Android-H5app逆向总结
H5app逆向总结H5app是在app里使用webview组件,相当于在app里植入web页面,通过js代码进行操作。
对于这类app,一般需要使用android sdk中自带的工具:android_sdk\tools\bin\uiautomatorviewer.bat可以分析当前app页面的组件,一般最外层的就是webview组件。
H5app一般分为几种:
纯js的,就是加密和发包都是在js代码里的。
js和java混合的,就是js中加密java发包或者java加密js发包的,一般需要js和java的相互调用。
纯java的,就是加密和发包都是在java代码里的,也需要js和java的相互调用。
分析方法1、纯js可以在chrome://inspect(需挂vpn)来远程调试app,不过app一般默认是不允许webview_debug的,所以chrome默认无法调试,需要先使用frida hook掉相关函数设置debug模式为true再进行抓包调试。
hook代码一般为:(当然有的时候还是需要jadx分析他限制调试的地方,不一定完全是这个)
android.webkit ...
Android-密码学数字签名
数字签名数字签名介绍数字签名是非对称密钥加密技术与数字摘要技术的应用,可以用来保证数据不可伪造并且确认数据是由谁发送的。
简单来说就是数字摘要(md5、sha系列。。)和RSA的结合,即对明文数据进行数字摘要后,再使用RSA的私钥对数字摘要hash值进行加密,最后通过RSA的公钥解密验证。
这么做的原因是通过数字摘要的靠伪造性可以保证数据不可伪造。
如果修改了消息,接收方可以对消息进行哈希后和数字摘要验证是否一致得知消息是否被伪造。
但是为了防止攻击者如果同时篡改了消息和数字摘要(在数字摘要算法泄露的情况下,如使用常规的公开的md5),需要使用RSA再进行一次加密,通过私钥加密公钥解密验证的方式,可以保证数据不可伪造并且根据公钥的对应信息可以得知
由于攻击者无法得知加密者的私钥,因而无法伪造RSA加密。
这俩个缺一不可,缺少了RSA安全性降低,缺少了数字摘要,则效率降低,因为RSA处理大数据的效率十分缓慢,对于几G的文件信息几乎难以使用RSA,因此需要先进行数字摘要获取较短的消息(如md5的128bit)后使用RSA处理。
JAVA中实现但是在java中,发现数字签名算法并不是简单 ...
Pwn-高质量比赛题目复现5-2024强网杯S8线上初赛
2024强网杯S8线上初赛babyheap参考自大佬:2024 强网杯S8Pwn方向部分题解 - 先知社区
这里复现一下,这个算是这次强网杯最简单的一道pwn题了,这题有两种解法。
首先分析题目,libc2.35,保护全开,常规菜单题。
add申请0x500~0x5FF大小的chunk,且最多能add6次,最多能show和edit1次。
free存在uaf漏洞。
同时提供了一个Env菜单和一个magic菜单,这俩在方法二才会用到。
方法一:利用思路常规IO利用,2.35存在svcudp_reply+26的gadget,因此直接打apple2即可。
利用过程1、题目开启了沙箱,查看沙箱如下
可以看到禁用了open和openat。这里也是刚刚学到的,这俩被禁用了还可以使用openat2替代。
shellcode如下:
12shellcode = asm(shellcraft.openat2(-100,flag_addr,flag_addr+0x1000,0x18)+shellcraft.read(3,heap_base+0x10000,0x50)+shellcraft.write(1,he ...
Pwn-高质量比赛题目复现4-2024CISCN初赛
2024CISCN初赛gostack比赛时调了很长时间才出的,这里回顾一下。
go语言的pwn题,ida打开逆向不好看(ida8.1还好,会加载go的一些函数名,ida7.7就更难分析了)
首先运行一下,提示输入Input your magic message :
并且输入完就退出了,所以只有一次输入的机会,猜测存在栈溢出。
用shift+f12定位到该输出,找到主要函数,如下:
分析发现0x4A09D3处应该就是我们的输入函数,gdb在这下断点,输入数据后,查看和ebp的偏移。
输入完后发现数据并不在当前栈内,查看ida反编译代码发现输入完存在赋值操作,因此猜测后续会把输入的数据再拷贝到栈上。
所以一直ni下一步,这时就会发现栈上有我们输入的数据了,计算偏移即可。
由于没有libc,且gadget充足,因此考虑syscall(syscall|ret需要使用ropper找),首先调用read向bss读入binsh,之后调用execeve。
这里有个坑,就是在bufio__ptr_Scanner_Scan函数里有一个cmp比较指令,比较栈上那一处是否为0,所以填充到该位置时填充 ...
Pwn-高质量比赛题目复现3-第六届强网拟态线下赛
第六届强网拟态线下赛记一道格式化字符串题目,个人感觉算是格式化字符串里的困难级别了,几乎限制到了最高。
参考自大佬: https://zikh26.github.io/posts/a523e26a.html
libc2.31,保护全开。
main函数如下:
分析可知,只有一次bss段格式化字符串漏洞利用的机会,且printf后跟着exit。
题目分析:1、题目给了栈地址的后四位,用于我们修改返回地址调用链。
2、printf后跟着exit,因此不能控制main函数的返回地址,并且libc未知,也没法修改exit_hook为target,所以只能修改printf函数的返回地址成target,以便后续再次利用。
具体思路:首先获取栈地址低位123ru("Gift: ")ret_addr_low = int(p.recv(4),16)success("ret_addr_low: " + hex(ret_addr_low))
第一步构造首先我们需要根据已知的后四位栈地址,修改返回地址由0x1250 变成0x1223(即read函数的起始地址),因为只 ...
Pwn-堆进阶-House of apple2
House of apple2摘抄自大佬: house of apple2之_IO_wfile_overflow - 先知社区
高版本在禁用了一些hook的情况下,一般的打法都是打io,即通过伪造io_file,然后使用large bin attack 或tcache bin attack修改_IO_list_all或 _IO_stdin等指向堆地址,其中该堆地址处即为伪造的io_file_data。
对于io_file等知识,这里不再赘述,可参考大佬博客:https://bbs.kanxue.com/thread-272098.htm
由于多种io利用链里属apple2最为常用,这里总结一下apple2的几个利用方法。
apple2是由大佬roderick01发现的调用链,其中有多条调用链,这里这阐述第一种_IO_wfile_overflow,具体详见:https://bbs.kanxue.com/thread-272098.htm
这里写一下我的理解。
简介首先回顾一下io结构体的源代码:
1234567891011121314151617181920212223242526272 ...
Pwn-高质量比赛题目复现2-2024吾杯CTF
2024吾杯CTF题目挺难的,比赛的时候有事没怎么打,也没做出来,这里复现一下。
参考自大佬博客:[吾杯 2024] pwn (Yang,如果能重来)-CSDN博客
Yang比赛时没看,有时间再复现吧。。。
如果能重来格式化字符串漏洞的利用,个人感觉应该是格式化里边的困难程度了。
首先checksec看一下,保护全开,没法修改got且存在pie,并且没有后门函数。
main函数是先调用了sub_12f6后调用了sub_13d7,两函数如下:
13d7中只存在一次格式化字符串漏洞,虽然是栈上的,但是只有一次利用(dword_404C初始值为1)几乎且无后门函数,并且开启了pie,got表不可改,感觉所有的都给禁用了,比赛时候就卡住了,虽然根据提示猜测sub_12f6可能有什么东西,但是看了半天汇编也没看出来,这里复现一下佬的思路。
sub_12f6函数调用后,在栈上残留了一个栈地址,栈内存如下:
因为只有一次格式化字符串利用,所以第一步肯定是劫持返回地址使得能够重复利用。因此我们可以输入到该位置修改后两位使其指向返回地址处,然后修改返回地址为start(因为start会重新将dwo ...
Pwn-高质量比赛题目复现1-2024羊城杯初赛
2024羊城杯初赛参考自两位大佬: 2024羊城杯PWN详细全解 - 先知社区 和 羊城杯2024预赛 - rot’s Blog
logger有关C语言异常捕获机制的一道题。
首先查看保护,存在canary,但是没开启pie。
分析main函数,主要是菜单的两个操作,一个Trace,一个Warn。
Trace代码如下:
分析发现,在循环向byte_404020中写入时,一共循环写入了9次,而该数组大小为16*8 = 128,因此当最后这一次循环时会溢出覆盖掉src,这里的src在下边会用到。
Warn代码如下:
Warn中read存在明显的栈溢出,但是因为开启了PIE,所以没法直接利用,这时候就需要使用异常处理函数了。
C++异常处理函数C++的异常处理机制有三个关键字:throw、try和catch。
其中throw是抛出异常、try包含异常模块、catch捕获抛出的异常。
简单例子:
1234567891011121314151617181920#include<iostream>using namespace std;double Div(int a ...