在前面讲到过使用Theos进行越狱开发,但是流程太多太复杂了。通过使用iOSOpenDev,我们可以使用Xcode开发,生成,scp到设备上,killall SpringBoard等一系列操作一次完成。 首先安装Theos,然后配置export THEOS = /opt/theos ,iOSOpenDev需要这个环境。 然后下载iOSOpenDev,下载地址:http://iosopendev.c […]

今天在博客群里看到群友发的一个Crackme程序,一好奇就下下来看了一下。 程序下载地址:http://pan.baidu.com/s/1bn72IaN 程序运行后的界面如下: 首先观察下界面组成,一个name和serial输入框,一个验证状态,一个About按钮,没有菜单,没有多余的按钮。 初步猜测程序通过监听输入框消息来实时验证输入信息的,验证状态也会实时显示在Status上面。 好了,话不多 […]

fishhook是一个非常简单的库,它能动态替换运行在IOS模拟器或设备上Mach-o文件的符号表。是facebook的一个开源工具,github地址: https://github.com/facebook/fishhook 使用方法如下: 123456789101112131415161718192021222324252627282930313233343536373839404142434 […]

Object-c 运行时允许你修改selector(method name)到implementation(the method code itself)的映射,在不修改 iOS 系统类库或第三方类库的源码基础上,修改原有调用逻辑。 也就是说替换两个方法的实现,相当于Hook。 下面先看一个例子: 比如我们想替换NSObject中的lastObject方法,先定义替换方法: 12345- &#40 […]

符号表中有些符号是必须的,但是很多符号都是去掉的。 先来看一个正常的二进制文件的符号表: 从上面我们可以看到很多暴露的类名、函数名等,这让攻击者很容易看出你的程序中有哪些关键的逻辑。但是我们对该文件strip后,再来看它的符号表: strip MethodSwizzlingDemo  这时我们看到程序中定义的函数在符号表中都没有了。 而且这样在反汇编的代码中也不会存在符号。  

如果你的程序里有重要的计算过程不想被别人分析出来,那么就可以使用-O3编译选项来优化你计算逻辑。 一个没有优化的简单计算程序: 1234567891011#include <stdio.h> int main(int argc, const char * argv[]) {     int i;     […]

我们知道一般的函数调用都会通过call的方式来调用,这样让攻击很容易对一个函数做手脚,如果是以inline的方式编译的会,会把该函数的code拷贝到每次调用该函数的地方。而static会让生成的二进制文件中没有清晰的符号表,让逆向的人很难弄清楚逻辑。 下面我们来看看一个普通函数及其反汇编代码: 12345678910111213141516171819202122int isValidate&#4 […]

一、检测调试 当一个应用被调试的时候,会给进程设置一个标识(P_TRACED),我们可以通过检测该进程是否有设置这个标识来检测进程是否正在被调试以保护好我们的应用。 123456789101112131415161718192021222324#include <sys/types.h> #include <sys/sysctl.h> static int check_de […]

ASLR (Address Space Layout Randomization),即地址空间随机布局。ASLR特性是为了防御攻击对已经地址的攻击才加入的,程序在运行时加载的地址都是随机的,正因如此,所以我们在调试程序的时候下断点要用程序的文件偏移加上加载到内存的随机地址。 有ASLR特性的程序在Mach-o文件头都会有PIE的标识。 同时运行时加载的内存地址是随机的。 我们现在要做的是去除这个特 […]