逆向一个app,断点怎么都断不下来,是啥原因呐

逆向个app,在xcode中,device 找到奔溃日志,提示
Thread 3 Crashed:
0 libsystem_kernel.dylib 0x383a41f0 __pthread_kill + 8
1 libsystem_pthread.dylib 0x3840e792 pthread_kill + 54
2 libsystem_c.dylib 0x38354fd8 abort + 72
3 xxx 0x000d24d8 0x7c000 + 353502
4 xxx 0x000d2642 0x7c000 + 353610

然后 我再lldb,给这个位置下断点,怎么都断不下来。这个是啥子原因呐。

给哪个位置怎么下断点?

感谢张总解答。
我lldb,进入地址空间,找到程序基地址,在基地址+353610(转化为16进制)处下断点。在基地址+353502(转化为16进制)处也下断点了。

下断点 我就用 b xxx (xxx就是基地址+353610十六进制的值)。这样对不?

然后 c, 结果直接报错了

所以报错是啥

报错如下:

[AMapFoundationKit][Info] : Key验证失败, Error Domain=NSURLErrorDomain Code=-1009 “似乎已断开与互联网的连接。”
707] bundleId:xxx open:no
Process 1122 exited with status = 0 (0x00000000)

我就是想把这个断下来,到代码的地方去看看啥情况。咋就断不下来,我哪里有问题呢[可怜]

加多个断点b exit再试试

下了断点,没啥用啊

网上查了资料,好像理解错了。
xxx 0x000d24d8 0x7c000 + 353502 这个0x7c000 并不是image list -o -f 找到的基地址。需要用.dsYM文件结合奔溃日志才能找到代码位置。
但这种逆向的,如何根据奔溃日志找到奔溃位置呢?

这样下断点当然错了呀。。。应该先找到崩溃的位置在二进制文件里的偏移量(0x000d24d8-0x7c000),然后在调试的时候用当前基地址+偏移量。

xxx 0x000d24d8 0x7c000 + 353502
xxx 0x000d2642 0x7c000 + 353610

这个日志很奇怪啊,正常情况下,0x000d24d8 应该等于 0x7c000 + 353502 才对,但是这里明显不正确。

以往的经验,可以直接开IDA,跳转到353502看为毛闪退

是的。这个数据我自己改了下,我怕暴露我在弄哪个app,所以我改了下。0x7c000 + 353610 是应该等于前面的值,不好意思,带来困扰了。

353502 转化为16进制,再调试,image list -o -f 找到基地址,再加上353502的十六进制,下断点,结果断不下来。。。。

难道两次程序执行走的路径不一样?一次直接运行,一次是调试运行,

崩溃日志我是直接在手机上运行程序,然后在xcode里找奔溃日志的。似乎调试时无法产生崩溃日志,我在xcode里没有找到

不对吧,0x000d24d8-0x7c000 这个的值 因该是 代码在app二进制中的绝对地址吧

要的就是这个值啦。直接去ida或者hopper直接找就能找到是哪个地方了、我一直都这么找的,从来没错过。