首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS逆向(7)-LLDB,自制LLDB脚本,窜改微信红包金额

标准的 LLDB 提供了一组广泛的命令,旨在与老版本的 GDB 命令兼容。 除了使用标准配置外,还可以很容易地自定义 LLDB 以满足实际需要。...命令和子命令按层级结构来排列:一个命令对象为跟随其的子命令对象创建一个上下文,子命令又为其子命令创建一个上下文,依此类推。 :我们想在前面的命令序列的上下文中执行的一些操作。...,那就只用touch创建一个吧 // 创建.lldbinit touch ~/.lldbinit // 写入 vi ~/.lldbinit // 查看 cat ~/.lldbinit 在.lldbinit...:查看当前堆栈,并且尽可能的恢复符号表!...这就很牛逼了,要知道在我们逆向的过程中,大部分研究的APP都是已经去符号的!

1.1K40

【Dev Club分享】iOS黑客技术大揭秘

两个参数都找到后,在lldb中输入: br s -a ‘基地址+偏移量’ 然后用 “br l” 确认一下断点是否设置成功 进入聊天界面,再次向群发送一个消息,会发现 ui卡住了,观察 lldb控制台,会提示进程被断住了...,在 lldb中继续输入 bt指令,重点观察模块名是 WeChat的栈,但是由于没有符号表,我们只能看到栈的内存地址: ?...cycript个人感觉是比较神奇的,它在进程运行时动态注入。 没有细看它的源码,网上资料称,它通过 taskfor_pid函数获取目标进程句柄,然后通过在进程内创建新线程并执行自己的代码。...对于 cycript这种 bt的行为,利用系统的 root权限在进程中创建线程并执行自己的代码,目前还没想到好的对策,如果有老司机有方法,希望能指导一下~ 最后再说说 lldb反调试,网上大多都提到 ptrace...connect://deviceIP:19999 然后在lldb中下符号断点 b ptrace, 在lldb中输入c命令之后看ptrace第一行代码的位置,继续输入命令: p/x $lr 找到函数返回地址

2.2K71
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    教你 Debug 的正确姿势——记一次 CoreMotion 的 Crash

    抛开错误的函数名,看看堆栈的调用顺序,看上去是像是 CoreMotion 在子线程起了一个 Runloop,然后在这个 Runloop 处理来自 IOKit 的回调。...接下来在真机上编译运行手机QQ,启动后暂停进入 lldb,执行命令:image list 命令可以得到当前 CoreMotion 的载入地址: [ 36] 1EE3BF50-5BBD-3BB1-B441...然而到这一步后似乎遇到死胡同,函数符号都被裁剪掉,而且这里的回调都是 C 函数,无法从 selector 获取方法名,操作的也不是 OC 对象,唯一可以确定的是进入手机QQ的 好友动态 页面时该函数会被调用...通过查看此页面代码,确实会启动一个 CMMotionManager 然后通过回调监听陀螺仪的回调,但是此段代码并非新增功能,之前版本一直稳定工作,检查后没有发现可疑点。...global_queue 里面,属于并发队列,UIAccelerometer 的回调又是在主线程,所以造成了上面的问题:快速开关界面造成多线程同时调用 -[UIAccelerometer sharedAccelerometer

    2.9K71

    从微信扔骰子看iOS应用安全与逆向分析

    上面的这些工具大部分都是基于内存 dump,也就是需要通过 exec 执行目标程序才实现砸壳,这可能会让一些 App 通过在初始化函数中自我检测来对抗砸壳。...或者可以用 Reveal 在电脑端分析,当然还是需要将 RevealServer.dylib 注入到目标进程中并调用[IBARevealLoader startServer],参考官方的 lldb 脚本...__text + 27425072) Summary: WeChat`___lldb_unnamed_symbol129751$$WeChat + 624 符号恢复 根据 lldb 中每个函数地址在...对于二进制汇编代码的修改大同小异,不过对于 iOS 程序而言其实也有其他选择,下面逐一介绍: Inline Hook 这是最为通用的 hook 方式,即在指定地址前增加跳转指令,保存现场并跳转到用户指令,执行完后还原现场并返回执行.../python-reference.html https://github.com/llvm/llvm-project/tree/main/lldb/examples/python 后记 本文以微信扔骰子小游戏为例

    2K40

    免越狱调试与分析黑盒iOS应用

    对于Android来说,就是将安装包解压后注入字节码,使得应用在启动前加载我们准备的.so动态库, 从而实现在应用的上下文执行任意代码的目的;对于iOS也是一样,区别是所注入的动态库为.dylib。...以insert_dylib为例,注入dylib只需一条命令: $ ....动态调试 终于,我们成功在目标iOS应用中注入了我们自己的动态库!由于动态库的代码是我们自己写的, 因此可以编写复杂的插件,在应用上下文执行任意代码。...设置断点 b ptrace # 继续执行 continue # 触发断点后直接跳转到返回地址 register write pc `$lr` # 绕开ptrace继续运行 continue lldb...还支持python扩展,从而实现更丰富的自定义功能,详见LLDB-Python。

    1.9K40

    Android基础开发实践:如何分析Native Crash

    Linux中对信号的定义在signum.h文件中: ? 4.2 FaultManager 除了SignalCatcher,Runtime在启动的时候会创建一个FaultManager, ?...符号偏移量(以字节为单位):12 由于app中的so是通过jni代码编译而来,编译出的so如果有对应的调试信息,就可以通过这些调试信息找到符号对应的代码行,这些调试信息就是符号表,包括symtab以及...以下是一个典型的没有symtab符号表的so信息(这个so是经过执行gradle任务transformNativeLibsWithStripDebugSymbolForDebug时strip后的): ?...attached to process 12824 从上面可以看出,Android Studio通过cat输出lldb-server并run-as以应用的权限执行cat进行接收,然后将lldb-server...然后使用同样的方式将一个shell脚本start_lldb_server.sh发送到app数据目录。最后以app的权限运行脚本启动lldb。

    18.2K153

    汇编和栈

    在深入研究 RSP 和 RBP 之前,最好快速了解一下 StackWalkthrough 中发生的事情。在 StackWalkthrough 函数上创建一个符号断点。 构建并运行。...然后将 RDX 设置为 0x0,然后将从堆栈中 pop 的值存储回 RDX 寄存器。 请确保您在心里很好地理解这个函数中发生了什么,因为接下来您将研究 LLDB 中的寄存器。...为了解决这个问题,在 LLDB 中输入以下内容 (lldb) command alias dumpreg register read rsp rbp rdi rdx 这将创建命令 dumpreg,它将...在 LLDB 中,键入以下内容: (lldb) si 这个命令是单步调试的命令,它告诉 LLDB 执行下一条指令,然后暂停调试器。 现在,您已进入 StackWalkthrough。...再次输入 si 和 dumpreg: 基本指针从堆栈中 pop,并重新分配回它进入该函数时的原始值。 调用规则指定 RBP 在函数调用之间应保持一致。

    3.7K20

    Swift进阶-LLDB调试

    memory 在当前目标上操作内存的命令过程 platform 管理和创建平台的命令 plugin 管理LLDB插件 process 与当前进程交互的命令平台 quit 退出LLDB调试器。....当前命令缩写(类型“帮助命令别名”以获取更多信息) add-dsym 将调试符号文件添加到目标当前模块中的一个通过指定调试符号文件的路径,或使用选项来指定下载符号的模块 attach 通过ID或名称附加到进程...file 使用参数作为主要可执行文件创建目标 finish 完成执行当前堆栈帧后停止返回,默认为当前线程,除非指定 image 为一个或多个目标访问信息的命令模块 j 将程序计数器设置为新地址 jump...显示任何返回值与LLDB的默认格式 q 退出LLDB调试器 r 在调试器中启动可执行文件 rbreak 在可执行文件中设置断点或断点集。 repl 评估当前线程上的表达式。...显示任何返回值与LLDB的默认格式 run 在调试器中启动可执行文件 s 源级单步,单步调用。

    87830

    iOS逆向(6)-从fishhook看Runtime,Hook系统函数

    MachO,并且由MachO引出了dyld,再由dyld讲述了App的启动流程,而在App的启动流程中又说到了一些关键的名称如:LC_LOAD_DYLINKER、LC_LOAD_DYLIB以及objc的回调函数...并且在末尾提出了MachO中还有一些符号表,而有哪些符号表,这些符号表又有些什么用呢?笔者在这篇文章就将一一道来。...所以在每次调用OC方法的时候就让我们有了一次改变消息转发「目标」的机会。...每次在调用一个C函数的时候都是执行一句汇编bl 0xXXXXXXXX。 所以上面讲述到的消息转发的机会没有了,也就是没有了利用runtime来Hook的机会了。...这篇文章利用了一些LLDB命令行看了许多我们想看的内容,如image list,register read还有dis -s,在我们正向开发中,LLDB就是一把利器,而在我们玩逆向的时候,LLDB就成为了我们某些是后的唯一途径了

    1.5K20

    FRIDA-API使用篇:Java、Interceptor、NativePointer

    实现了证书类的javax.net.ssl.X509TrustManager类,,这里就是相当于自己在目标进程中重新创建了一个类,实现了自己想要实现的类构造,重构造了其中的三个接口函数、从而绕过证书校验。...需要注意的是对于Thumb函数需要对函数地址+1,callbacks则是它的回调函数,分别是以下两个回调函数: 1.2.1 Interceptor.attach onEnter:函数(args):回调函数...请注意,此对象在 OnLeave 调用中回收,因此不要将其存储在回调之外并使用它。如果需要存储包含的值,请制作深副本,例如:ptr(retval.toString())。...onEnter回调函数 onEnter: function (args) { this.fileDescriptor = args[0].toInt32(); }, //read函数执行完成之后会执行...图1-11 终端执行 1.4 NativeFunction对象 创建新的NativeFunction以调用address处的函数(用NativePointer指定),其中rereturn Type指定返回类型

    4.7K00

    iOS性能优化之启动优化

    Main函数之前的性能检测 应用的启动时间,一般分为Main函数执行之前和之后,执行之前称之为pre-main 系统提供了环境变量,让开发者可以看到pre-main过程中的耗时 查看方式:在Xcode中...如果函数处于子线程,那__sanitizer_cov_trace_pc_guard函数也会在子线程进行回调 所以,当我们通过回调收集函数名称时,也要保证线程安全 5.6.1 收集返回地址 以下案例,我们使用线程相对安全的原子队列进行返回地址的收集...函数的调用 这就是循环引发的大坑,SanitizerCoverage不但拦截方法、函数、Block,还会对循环进行HOOK 案例中,while循环被HOOK,循环的执行会进入回调函数。...回调函数中存入队列的还是touchesBegan的函数地址,这会导致队列中永远存在一个到两个touchesBegan,next永远获取不完 解决办法: 在Build Setting→Other C Flags...案例还要解决几个问题: 过滤掉自身touchesBegan的函数名称 函数和Block的符号,需要在函数名称之前增加_ 相同的函数符号,需要进行排重 队列原则,先进后出。

    1.9K11

    iOS代码调试之LLDB命令

    ),具有REPL (Read-Eval-Print Loop,交互式解释器)、C++和Python插件,位于Xcode窗口底部控制台中,也可以在terminal中使用。...在输出结果中有类似于$0,$1这样的符号,它是指向对象的一个引用,在控制面板中可以直接使用这个符号来操作对应的对象,它们存在于LLDB的全名空间中,目的是为了辅助调试。...打印对象除了以上命令外,也可以在控制台左侧区域,点击变量右键点击 Print Description of “xxx”,或者选中变量后,点击下边栏的i按钮,即可在控制台区看到打印结果: ?...它能够在调试时,动态的修改变量的值,同时打印出结果,在调试想要让应用执行异常路径(如执行某else情况)或者修改某些中间变量值如(如修改返回状态码以查看客户端相关响应等)非常有用,可以创造各种实际中难以遇到的测试环境辅助测试...4.线程和帧状态检测 在进程停止后,LLDB会选择一个当前线程和线程中当前帧(frame)。很多检测状态的命令可以用于这个线程或帧。

    1.8K20

    iOS逆向(4)-代码注入,非越狱窃取微信密码

    但是FYHook在ipa文件中,并不代表着FYHook就可以被我们的可执行文件所执行,因为FYHook并没有没导报入我们的可执行文件,只有在这个可行执行文件的某一个地方做好标记,告知可执行文件,在适当的时候需要加载外部的...Step 2 创建Framework文件 新建一个Framework文件,取名FYHook,在FYHook中新建文件InjectCode,在InjectCode加入之前提到的同样的load代码, 等到如下工程...Step 6 新的思考 之前分析了我们创建了FYHook,但是没有对MachO注入,得到的答案是来了,老弟?不能被输出,WeChat能跑起来。...那么如果我们对MachO注入FYHook,却没有创建对应的FYHook.framework,会怎么样呢? 这就留给大家思考,再去验证了,有答案的同学也能下方留言,并说出原因哦。...运行后结果如图: ?

    2.3K10

    如何调试Android Native Framework

    ,因此我们需要借助模拟器;首先创建一个编译出来的调试符号对应的API版本的模拟器,我这里提供的是5.1.1也就是API 22;然后使用编译出来的 system.img 启动模拟器([Demo]工程的image...设置调试符号以及关联源码 在运行程序之后,我们可以在Android Studio的状态栏看到,LLDB调试插件自动帮我们完成了so查找路径的过程,这一点比gdb方便多了!...接下来我们把编译得到的符号文件 libart.so 告诉调试器(符号文件和真正的动态链接库这两个文件名字相同,只不过一个在编译输出的symbols目录) ;在lldb窗口执行: (lldb) add-dsym...以下以root的设备为例(比如模拟器) 首先把lldb-server push到调试设备。...run-as可以让我们以某一个app的身份执行命令——如果我们以被调试的那个app的身份进行attach,自然是可以成功的。

    3.7K20

    重写了llvm+clang+libc++和libc++abi的构建脚本

    之前的脚本,每次升级版本都要折腾下,一开始是编译的默认静态库巨大无比,后来改成动态库后一会儿好一会儿不好。...目测3.9.0版本的问题是开启动态库的编译模式以后有些子工程还是静态库,并且会漏掉加-fPIC,即便我在cmake的选项里加了也没用。...所以索性改成Release编译了,去除了调试符号。 现在编译速度比较正常了,编译出的文件大小已比较正常了。 再就是一些组件的细节调整了下,编译lldb的时候会检查下依赖的库有没有,没有就跳过。...python-devel/python-dev(lldb依赖项) swig(lldb依赖项) libedit/libedit-devel/libedit-dev(lldb依赖项) libxml2...编译的依赖库: libc++ 3.9.0 libc++abi 3.9.0 libunwind 3.9.0(这个库不会install) 默认编译目标: llvm 3.9.0 clang 3.9.0

    2.2K20
    领券