
ios-逆向
rv0p111
之前由于一些原因博客没有更新,现在还是正常更新,继续分享..
展开
-
汇编的简单介绍
关于汇编、存储器、CPU的基本介绍1、汇编指令其实就是机器指令的助记符,和机器指令是一一对应的。2、每一种CPU其实都有自己的汇编指令集,因为如果CPU架构不同的话,其实对应的机器指令也是不一样的,而机器指令又是和汇编指令是一一对应的,所以每一种CPU才会有自己的汇编指令集。3、CPU可以直接使用的信息在存储器进行存放,而存储器又分为RAM和ROM,RAM是可读可写的,而ROM则只是可...原创 2018-04-16 18:59:45 · 409 阅读 · 0 评论 -
8086汇编转移指令
转移指令 我们把可以修改IP,或者同时修改CS和IP的指令统称为转移指令如果只修改IP的称为段内转移,比如说jmp ax同时修改CS和IP的称为段间指令,比如说jmp 1000:0 由于转移指令对IP的修改范围的不同,软内转移又可以分为短转移和近转移 短指令IP的修改范围为-128~127 近转移IP的修改范围为-32768~32767jmp为无条件转...原创 2018-05-05 14:07:59 · 617 阅读 · 0 评论 -
lldb+debugserver调试app
这里我们主要做的就是去调试我们的短信app,利用debugserver和lldb调试步骤1、ssh到iPhone2、debugserver -x backboard *:1234 /Applications/MobileSMS.app/MobileSMS 这个就是去启动MobileSMS,并且去开启1234端口,然后去等待任意IP地址的LLDB接入3、在Mac的命令行下去输入/App...原创 2018-05-18 11:55:51 · 876 阅读 · 0 评论 -
fishhook源码分析
最近也学习了下这个fishhook库,感觉200多行代码就能实现方法的交换确实挺厉害的,下面就进行简单的分析下首先我们先来查看下fishhook.h文件#ifndef fishhook_h#define fishhook_h#include <stddef.h&a原创 2018-05-12 12:02:46 · 1612 阅读 · 0 评论 -
Xcode下的全局变量在可执行文件中的位置
Xcode下的全局变量在可执行文件中的位置首先我们先声明两个变量,然后编译生成可执行文件int a = 10;NSString * name = @"zx";然后我们通过MachOView来查看其的可执行文件 再去MachOView中去查看数据的所在,然后我们再去看MachO文件中的值为0A位10 接下来我们再去查看下NSString的那个字符串所在的位置可执行文件加...原创 2018-05-06 15:04:54 · 1013 阅读 · 0 评论 -
汇编利用cmp指令将小写字母转换为大写字母
这里主要是先和0进行比较,如果cx为0了,那么就直接利用jcxz指令直接跳转到ret助理,然后再利用cmp指令去进行和小写a的ASCII码进行比较,比较之后如果是小于就直接再去寻找下一个字符,程序如下所示assume cs:codesg,ds:datasgdatasg segment db "Beginner's All-purpose Symbolic Instruc...原创 2018-05-13 09:54:24 · 1110 阅读 · 0 评论 -
关于指针的汇编代码的分析
关于指针的汇编代码的分析 在这里就做个最简单的分析,根据汇编代码,看指针是怎么工作的比如说我们写了下面的代码void func (){ int* a; int b = 10; a = &b;}查看生成的汇编代码 关于栈空间的描述 看到在内存中存储的位置,内存的读写都是往高地址走的,int *a是局部变量,所以也要放在栈当中...原创 2018-04-28 10:37:42 · 1397 阅读 · 0 评论 -
8086汇编下的ret指令和retf指令
关于ret指令和retf指令 在这里主要是想做个记录ret指令是用栈中的数据,修改IP的内容,从而实现了近转移(就是只修改IP)retf指令是用栈中的数据,修改CS和IP的内容,从而实现了远转移(就是修改了CS和IP)当CPU执行指令ret的时候,会进行下面的操作1、(IP)= ((ss *16)+(sp))2、(sp)=(sp)+2当CPU执行指令retf的...原创 2018-05-06 17:10:18 · 4287 阅读 · 0 评论 -
8086汇编显示字符串
做了题目也总结一下,如下所示 程序如下所示assume cs:code,ss:stack,ds:datadata segment db 'Welcome to masm!',0data endsstack segment db 48 dup (0)stack endscode segment start:mov dh,8 ;代...原创 2018-05-06 22:33:20 · 3259 阅读 · 0 评论 -
8086汇编解决dword除word的数据溢出问题
讲道理,这道题刚开始真的写看公式以为要按照公式来,然后写了超级复杂的代码考虑来考虑去栈啊甚至都要用到状态寄存器了,不过忽然发现,好像到这一块,状态寄存器还没讲,然后就重新来,先看下题目 程序如下所示assume cs:code,ss:stackstack segment db 128 dup(0)stack ends code segment...原创 2018-05-07 00:34:12 · 603 阅读 · 0 评论 -
x86架构下的函数汇编
关于x86架构下的函数汇编调用了下面的函数int sum(int a,int b){ int c = 3; int d = 4; sum(1,2); return a+b+c+d;}int main(int argc, const char * argv[]) { @autoreleasepool { sum(1,2)...原创 2018-04-29 08:11:59 · 908 阅读 · 0 评论 -
x86架构下的函数参数
x86架构下的函数参数 这里就拿x86-64架构下来举例子,在这个架构下分别用rdi,rsi,rdx,rcx,r8,r9作为第1-6个参数。rax作为返回值当我们去调用函数的时候long test(long a,long b,long c){ return a+b+c;}long sum(long a,long b,long c,long d,long e,lo...原创 2018-04-29 14:35:28 · 755 阅读 · 0 评论 -
分析iPhone的SpringBoard重启实现
首先我们拿到SpringBoard.app的可执行文件,然后进行用IDA进行分析,然后定位了relaunch SpringBoard函数我们在下面可以看到下面调用的是beginIgnoringInteractionEvents方法就是去开始忽略所有用户交互的事件 接着调用hideSpringBoardStatusBar方法去隐藏状态栏 接着我们再去查看这个子程序 看下...原创 2018-05-14 15:52:20 · 7713 阅读 · 0 评论 -
用or和and指令转换大写字母和小写字母
用or和and指令转换大写字母和小写字母我们如果去观察A、B、C、D、E、F和a、b、c、d、e、f 这些字母的二进制表示形式为A:01000001 a:01100001 B:01000010 b:01100010 C:01000011 c:01100011 D:01000100 d:01100100 E:01000101 ...原创 2018-04-29 19:06:23 · 2207 阅读 · 0 评论 -
8086汇编将数值显示在屏幕
题目如下所示 大致其实就是上面已经给出了算法,我们需要做的就是取得每一次的余数,然后保存起来,可以先压入栈中,因为栈是先进后出的,可以满足我们的需要,因为我们第一次获取的是我们要显示的最后的一个字符程序如下所示assume cs:code,ss:stackdata segment db 10 dup (0)data endsstack...原创 2018-05-08 11:14:48 · 17534 阅读 · 0 评论 -
利用汇编在80x25彩色字符模式下打印3行不同字符属性的Welcome to masm!字符串
简单介绍 这道题目说真的做的有点久的,不过也很好的可以总结了前面的知识,还是不错的先看下资料把,资料如下所示 注意:闪烁的效果必须要在全屏的DOS方式下才能看到编写代码如下assume cs:codesg,ds:data,ss:stackdata segment db 'welcome to masm!';设置数据 db 02h,...原创 2018-05-05 12:07:07 · 487 阅读 · 0 评论 -
关于Xcode下的汇编指令的优化
关于Xcode下的汇编指令的优化 Xcode默认情况下在release模式下就会进行优化,而在debug模式下默认是不会优化的编译器优化的等级的设置,Debug下是没有优化的,也就是说我写什么代码就生成什么样的汇编指令 优化等级五种 当我们选择优化等级为最后一个的时候,写了下面的函数int main(int argc, char * argv[]) { i...原创 2018-04-27 09:46:51 · 810 阅读 · 0 评论 -
分析8086汇编指令jmp的跳转程序
程序如下所示assume cs:codesgcodesg segment mov ax,4c00h int 21hstart:mov ax,0 s:nop nop mov di,offset s mov si, offset s2 mov ax, cs:[si] mov cs:[di],ax ...原创 2018-05-05 09:41:12 · 1727 阅读 · 0 评论 -
通过修改内存,直接修改NSArray的count属性
一、简单介绍最近学习了一波,想记录下....我们都知道NSArray有一个属性@property (readonly) NSUInteger count;是只读属性,但其实我们可以操纵内存直接进行修改。 我们通过打印下面的值,得到的count的值为4 ,那么我们该怎么去修改它呢?下面会有介绍 NSString * str = @"哈哈"; NSArr...原创 2018-04-13 21:29:14 · 941 阅读 · 0 评论 -
C语言实现数组结合NSArray分析
一、简单分析最近学习了下这方面的知识,所以这边就进行总结分析下,其实在ios中的NSArray其实就是一个结构体,而我们所谓的NSArray * array的这个array对象其实就是一个结构体指针,在下面经过编译之后的文件中其实就可以看出来了。所以我们可以自己去设置结构体去写一个,这里我们采用的时候线性表的顺序存储结构二、具体实践接下来我们就自己可以去模仿下NSArray去自己去创建一个数组,首...原创 2018-04-13 23:10:37 · 978 阅读 · 0 评论 -
NSMutableArray的扩容机制
一、简单介绍其实NSMutableArray的扩容的话应该就是在于如果其容量不够了,就会去重新malloc一块新的区域,然后会复制旧的数据到新的区域,之后把旧的空间给free掉。下面我们就先去查看下NSMutableArray的对象的内存信息以及下面的那个就是指向第一个数据的指针的地址信息,所以下面我们再去读取从它开始的100个字节的内存信息上面的0x01000020b0其实就是Milk字符串的地...原创 2018-04-14 08:52:10 · 2512 阅读 · 0 评论 -
do-while、for循环、while的实现思路
关于循环的实现思路其实最近也学习了下汇编,不过还是从8086开始学起,感觉这个还是比较容易上手的,然后学到loop指令,忽然发现这个指令不就是拿来实现循环的吗。然后进行了些许测试。在这里有总结下,这里是借助了一个工具来进行实现的。先看看这个指令的用法吧 这里cx表示的是8086CPU里面的一个寄存器。loop指令和cx寄存器结合使用就可以达到循环的效果mov cx,循环次...原创 2018-04-19 23:08:49 · 309 阅读 · 0 评论 -
关于adrp指令
adrp指令的浅析首先我们去写一个函数int fun(int a,int b){ //haha是printf函数的参数 printf("haha"); int c= a + g; return c;}然后去调用fun(1,2);我们可以看到在main函数中传入了参数,1 和 2,先保存在w8和w9中,然后再把w0和w1保存到栈...原创 2018-04-25 07:19:12 · 6630 阅读 · 1 评论 -
X86_64架构下的函数的if判断
函数如下所示void func(int a){ if(a==1) { printf("1"); } else if(a==2) { printf("2"); } else if(a==3) { printf("3"); } else if(a==4) {...原创 2018-05-02 19:41:00 · 357 阅读 · 0 评论 -
关于ARM64架构下的bl和ret指令
关于bl和ret指令的作用 自己也在摸索学习的过程中,就简单的介绍下它们两个的作用吧,其实bl指令就是会将下一条指令的地址放入lr(x30)寄存器,以及跳转到后面的地址处。具体过程如下所示 我们去关注下lr寄存器 进入sum函数,lr寄存器的值就改变了 当要去执行ret指令 成功跳转出来 为了去验证ret指令返回的就是地址就是根据lr寄存器来的,做以下的...原创 2018-04-21 13:39:29 · 10855 阅读 · 2 评论 -
观察Xcode下系统调用函数生成汇编指令
一、简单介绍原本之前用简单的汇编指令写了一个函数,不过发现进入死循环了,这是为什么呢?首先先看看之前写的汇编代码吧,下面的.text的意思就是告诉编译器,我这个在内存中是一个代码段,.global的意思就是全局函数的意思.text.global _C,_D_C: mov x0, #0xaaaa0000 bl _D mov x0,#0xcccc0000 ...原创 2018-04-21 15:44:59 · 1462 阅读 · 2 评论 -
通过汇编寻址方式修改数据
比如说有这么一条记录 这些数据在内存中存放的位置如下所示 如果这个时候这个公司的情况发生了改变,情况如下所示 这个时候我们需要去对这些数据利用汇编指令进行修改,我们可以这么做mov ax,segmov ds,axmov bx,60h ;确定了记录的地址 ds:bxmov word ptr [bx+0ch],38add word p...原创 2018-05-03 12:41:01 · 1552 阅读 · 0 评论 -
8086汇编下的div指令
首先我们需要去了解的是div是除法指令,除数有8位和16位两种,被除数默认是放在AX或者DX和AX当中,如果除数为8位,被除数则为16位默认是放在AX当中的,如果除数为16位,被除数就为32位是在DX和AX当中存放,DX存放的是高16位,AX存放的是低16位。 如果除数是8位的话,那么AL存储的是除法完成之后的商,AH存储的是余数,如果除数为16位,那么AX存储的是除法操作的商,DX存...原创 2018-05-03 13:14:12 · 5270 阅读 · 0 评论 -
关于函数参数的存储
关于函数参数的存储我们可以自己去写一个函数然后去观看其的存储方式,我这里写的就是一个a+b的函数,然后在main函数中去调用int sum(int a,int b){ return a+b;}int main(int argc, char * argv[]) { @autoreleasepool { sum(10,20);}跳进去看汇编代码...原创 2018-04-21 20:11:58 · 2240 阅读 · 0 评论 -
MonkeyDev中hook系统NSLog函数
讲道理,利用fishhook进行hook其实就可以了 比如说我们的ViewDidLoad方法当中的方法里面有输出123,456 我们想要对其进行hook- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"123"); NSLog(@"456");}创建一个monkeyDev的项目,然后在里面写入ho...原创 2018-05-17 12:38:48 · 2808 阅读 · 0 评论 -
利用方法交换重写URLWithString方法
系统自带的URLWithString:方法如果我们参数传入的包含有中文,那么url就为空,如果我们想自己定制一个这样的方法,比如说如果通过这个方法调用出来的url为nil的话,就让程序崩溃,那么我们可以在调用URLWithString:方法的过程中里面加一个断言所以我们可以这么做,创建一个NSURL的分类,然后在分类的load方法中去进行方法的交换+(void)load{ /...原创 2018-05-11 13:20:29 · 721 阅读 · 0 评论 -
ios下的hook的原理
其实Hook就是一种改变程序执行流程的一种技术的统称,下面就简单的介绍下在ios中的几种Hook的方式1、Method Swizzle利用OC的Runtime特性,动态去改变SEL(方法编号)和IMP(方法实现)的对应关系,达到OC方法调用流程改变的目的。主要用于OC方法。2、fishhook 它是Facebook提供的一个动态修改链接mach-O文件的工具。利用MachO...原创 2018-05-17 22:35:24 · 1769 阅读 · 0 评论 -
利用8086汇编除法函数和显示函数计算公司数据
讲道理关于这道题,真的哎呀痛苦是一方面,其实真的不怎么想写,不过最后还是去把这个程序自己给调试了一下题目如下所示 这里其实就是需要注意的就是寄存器的保护,以及之前几篇文章中讲的函数的调用assume cs:codedata segment db '1975','1976','1977','1978','1979','1980','1981','1982','1...原创 2018-05-08 18:11:52 · 456 阅读 · 0 评论