0x00 背景
假设你发现了一个windows程序的漏洞,你得注入一些shellcode来执行自己想要执行的命令,但是如果目标程序没有加载某些dll,你就无法在shellcode中直接调用那些API,所以你需要在shellcode中自行加载你需要的dll,然后调用。本文使用汇编模拟了这样一个过程,并将该汇编转换成了shellcode,使用该方法就可以生成任何你想要的payload了。注:本代码仅在win7和win10下测试过。
Continue reading
假设你发现了一个windows程序的漏洞,你得注入一些shellcode来执行自己想要执行的命令,但是如果目标程序没有加载某些dll,你就无法在shellcode中直接调用那些API,所以你需要在shellcode中自行加载你需要的dll,然后调用。本文使用汇编模拟了这样一个过程,并将该汇编转换成了shellcode,使用该方法就可以生成任何你想要的payload了。注:本代码仅在win7和win10下测试过。
Continue reading
前阵子看到了这篇讲winafl
的文章http://www.tuicool.com/articles/j2eqym6,也想按这篇文章试一试,但结果无法重现这篇文章的方法,所以我做了一些调查,总结了一下winafl的正确使用方法。
Continue reading
谷歌出了一款协议叫做protobuffer,它可以将数据编码成二进制流,并跨平台传输。它主要用在网络传输,尤其是http上。如果你使用burp等proxy截取使用protobuf的http请求,你只能看到一些乱码,看上去跟加了密似的w。当然如果你有.proto文件,你就可以完全解码这些二进制。遗憾的是,有时候你无法拿到.proto文件,比如说,某pkg,它使用IL2CPP编译成了汇编,不要说无法拿到.proto文件了,就连编译成的.cs文件也拿不到,这个时候就可以根据protobuf编码的规则,直接解码二进制,当然解码出来的东西并不完全准确,有些需要靠猜,而且各个field的名字也是无法复原的。
其实google自己已经提供了protobuf的解码,使用cat file.pb | protoc --decode_raw
就可以了,但是这个解码提供的信息较少,且不能将float,double等type直接转换出来。另外google并没有提供改写protobuf二进制的方法,所以我自己写了这个解码器,可以讲protobuf的二进制以json的形式输出,包含较多信息,且支持编辑后写回二进制,此外还将这个解码器集成成了burp的插件,可以直接在burp中改写包含protbuf的http请求。
本人一直是用日文键盘,但是windows的设定非常奇葩,如果是使用日语输入法,则会自动将键盘识别为日语布局,但是如果切换到中文输入法,则会自动识别为英文键盘,这给我输入中文带来很多不便。
Continue reading
公司的IT部门根据安全策略关闭了我的mac的internet share功能,但是工作中我需要用到这个功能,不想麻烦IT部门,就自己把这个限制给解除了。
Continue reading
使用unity开发iOS游戏的都知道,如果使用IL2CPP选项编译unity游戏,会生成CPP代码,然后再从CPP代码编译成可执行文件。使用这种方式编译出的iOS游戏非常难以逆向破解,因为你得去阅读arm汇编。更糟的是所有游戏中使用的字符串都被保存在了一个叫global-metadata.dat的资源文件里,只有在动态运行时才会将这些字符串读入内存。这使得用IDA对游戏进行静态分析变得更加困难,于是我写了这么一个IDA插件,可以从global-metadata.dat里提取出字符串,赋值给IDA中相应的变量。
Continue reading
最近在做一个函数的app的脱壳,记录一下遇到的坑。
Continue reading
对于Linux系统,有下表:
ASLR Level | -fPIC -pie | Code | Stack | Heap | comment |
---|---|---|---|---|---|
0 | Yes | Fixed | Fixed | Fixed | None |
0 | No | Fixed | Fixed | Fixed | None |
1 | Yes | Rand | Rand | Rand | Base address of heap is located immediately after the end of code segment |
1 | No | Fixed | Rand | Fixed | Base address of heap is located immediately after the end of code segment |
2 (default) | Yes | Rand | Rand | Rand | Base address of heap is fully randomized and has nothing to do with code segment |
2 (default) | No | Fixed | Rand | Rand | Base address of heap is fully randomized and has nothing to do with code segment |