美文网首页
二十一、ARM64汇编(三)

二十一、ARM64汇编(三)

作者: Lovell_ | 来源:发表于2018-12-25 23:18 被阅读31次

    一、叶子函数

    sp:stack point,作用是存储着某块内存的地址。一般是通过sp来指定一块内存给函数使用。

    叶子函数的堆栈平衡(通过指令生成汇编文件)

    栈空间的回收,仅仅是sp指针的挪动。



    二、非叶子函数01-开辟栈空间

    区别:
    1、非叶子函数多了现场保护现场恢复
    2、有16个字节用来保护现场(fp-x29lr-x30),执行完操作最后,恢复现场。

    sp:栈顶指针
    fp:占地指针
    sp和fp之间的空间,就是函数的空间:

    开辟空间和堆栈保护

    当sp恢复后,那32个字节的内存就是垃圾内存了,相当于被回收了。

    栈空间

    从上面的汇编代码和图片来看,可使用区的内存并没有用完还有8个字节,这是因为在分配内存的大小为16的倍数原因,是为了提高CPU的访问速度。



    三、非叶子函数02-恢复堆栈平衡

    bl带返回跳转指令会修改lr寄存器的内容。

    本小节见上。



    四、OC方法内存断点

    简单应用汇编——点击微信红包的时候做了什么。

    1、连接登录到手机;
    2、debugserver粘附到WeChat;
    3、点击微信红包,看打印台那个是点击事件,记录方法名;
    4、hooper打开微信脱壳包,搜索该方法名;
    5、方法名的地址+偏移地址,打断点该方法;



    五、用debugserver启动APP

    image.png

    我们还想知道方法传递了什么参数?

    ——x0-x7用来放参数。

    首先我们要知道方法调用的本质:

    OC方法调用本质即参数对应的寄存器 打印方法的具体参数

    方法的调用者是谁?方法一

    —— 通过函数调用栈得知

    frame1调用了frame0,所以拿到frame1地址减去偏移值,得到一个地址,在hooper中找:

    方法的调用者是谁?方法二

    ——通过lr寄存器

    register write
    
    返回到自己写的插件里去了

    在cydia中把微信插件删掉,再调试会更好,看到的就都是微信的东西了。



    六、用debugserver启动APP

    如何从微信启动那一刻,看它都做了什么:

    观察启动微信那一刻,如何debugserver 最开始是_dyld_start 开始单步执行往下

    开始单步执行,一行一行往下看,要费点时间,后面会来到main函数。



    七、破解命令行程序

    命令行代码 找到可执行文件拖拽出来 执行

    软件模拟:

    命令行代码 找到可执行文件拖拽出 执行

    破解:

    把可执行文件拖拽到hopper。

    破解方法之一:跳过while循环;

    image.png 重新生成可执行文件 image.png 破解成功

    不过,这只是个mac程序,我们要破解的是iPhone程序。

    hopper其他技能:

    image.png



    八、破解iOS程序

    密码输入正确的时候,按钮才会显示蓝色且能点击。

    需求:

    1、从手机中导出可执行文件;
    2、完成需求方法一:编写tweak项目;方法二:在hopper中改汇编代码。
    3、假设我们利用知识储备,知道了目标方法是viewDidAppear:。

    image.png nop的结果

    应该不弹框了。需求一完成。

    需求二:

    1、假设我们经过分析得知int a = 10 是个全局变量;
    2、改全局变量的值,全局变量在哪呢,借助MachOView工具。

    image.png image.png image.png image.png image.png image.png image.png image.png image.png

    相关文章

      网友评论

          本文标题:二十一、ARM64汇编(三)

          本文链接:https://www.haomeiwen.com/subject/agitlqtx.html