用Monkey 调试某音,一开始运行app安装好工程就停止了,

后续检测到就直接exit了

有exit不是更好调试?exit打个断点看看堆栈咯。

堆栈在上面有贴出来,不太清楚怎么解决。
我试过MSManagerML返回nil(无法联网)
hook了exit方法(卡在闪屏页)
堆栈上面frame #1和frame #2这两个方法我不知道怎么处理

frame #0: 0x00000001125d5478 libAwemeDylib.dylib 'exit(i=1) at AntiAntiDebug.m:99:5
frame #1: 0x0000000108710670 Aweme___lldb_unnamed_symbol326793$$Aweme + 3248 frame #2: 0x00000001087194c8 Aweme___lldb_unnamed_symbol326886$Aweme + 220
frame #3: 0x00000001086a11b8 Aweme` -[MSManagerML initWithConfig:] + 2472

直接hook exit不就好了

hook exit会卡在闪屏页进不去

那得再看看MSManagerML initWithConfig 这个方法里面的实现了

我今天刚试过了啊。13.5.1就一个地方0x10443E0B4。Debug模式下,正常登陆,刷视频,进入直播。都正常,未发现什么异常啊 :rofl: 难道又出现了传说中的人品问题 :blush:

啊…
你是把80替换成nop吗?那个地址是什么?我明天再看看。
大佬是用Monkeydev调试的吗?能分享下关键代码不:sweat_smile:

uint32_t svc_x80_byte = 0xd4001001;
uint32_t svc_x80_byte1 = 0xd2800010;

const struct mach_header *header = _dyld_get_image_header(0);

struct segment_command_64 *seg_cmd_64 = zz_macho_get_segment_64_via_name((struct mach_header_64 *)header, (char *)"__TEXT");
zsize slide = (zaddr)header - (zaddr)seg_cmd_64->vmaddr;

struct section_64 *sect_64 = zz_macho_get_section_64_via_name((struct mach_header_64 *)header, (char *)"__text");

text_start_addr = slide + (zaddr)sect_64->addr;
text_end_addr = text_start_addr + sect_64->size;
curr_addr = text_start_addr;

while (curr_addr < text_end_addr) {
    svc_x80_addr = (zaddr)zz_vm_search_data((zpointer)curr_addr, (zpointer)text_end_addr, (zbyte *)&svc_x80_byte1, 4,(zbyte *)&svc_x80_byte, 4);
    if (svc_x80_addr) {
      unsigned long nop_bytes = 0xD503201F;
      ZzRuntimeCodePatch(svc_x80_addr + 4, (zpointer)&nop_bytes, 4);
        curr_addr = svc_x80_addr + 4;
    } else {
        break;
    }

你好,可以看看 zz_vm_search_data() 这个方法的实现吗。
我的代码跟你不同的只有这里

感激不尽 :kissing_heart:
我按您给那个地址替换#80就没问题了,之前我是遍历替换所有的,然后就出问题了。估计是做了完整性检测。
可以教下您是怎么定位到这个地址的吗?

search里有一点点小问题,自己修改一下就可以了

0xd2800010 这个地址您是用来做什么的?

这不是地址 是arrm指令

这种有通用的绕过方式啊

受教了,各位大佬。
路漫漫其修远兮…

张老班,之前看你推荐的SVC #80方式挺好的,crash 不留任何堆栈信息,这样对反调试很好用,但是这个已经被定向■■了,还有没有别的可以主动crash的方法,不留任何堆栈信息的这种,求回复,给思路就行,我自己研究。

任何刻意的Crash都是不安全的,管你80还是90,要出其不意攻其不备。

说的有道理,但是怎样才能达到出其不意攻其不备呢?
我有个思路,通过C随机访问一个内存地址,让它BAD_ACCESS, 当然这种也是有特点的,他能想办法找到我这块并绕过去,因为我是有堆栈信息被他查询到,但是你说我不让他Crash把,我检测到被调试了,又能做啥,总不能任由他接着操作把,然后我记录下来,通过风控,封他的号,这样吗?

当然是秋后算账,时间随机,让他找不着北