Hopper 支持命令行调用吗?

需要对iPa进行自动化反编译,用户上传一个ipa文件,自动砸壳,使用classdump获取头文件。想问下Hopper支持命令行模式调用吗,直接反编译出所有的代码

貌似不支持,我也想查过。
有个应该支持的radare2

即使不支持, 也可以注入dylib自己实现啊

主要是获取汇编代码这块,还有生成伪代码的过程需要能够自动化,求大神给个思路!

感谢,我找下资料

这个还需要思路吗, 找到他的接口, 调用就是了, 跟外挂一个道理

谢谢!

Hopper确实有个命令行程序。不知道干啥用的

求详细介绍

好的,感谢!

为什么我找不到app文件里面的二进制文件呢?

显示包内容后,会有一个跟app同名的可执行文件

错了。二进制的名字是写在Info.plist里的,并不一定要跟app同名

我完全可以搞一个叫抖音的App,包名是傻逼.app然后可执行文件叫 ByteDance

谢谢,我已经找到了,一个文件一个文件实验,就找到了:joy::joy::joy:

谢谢,我已经找到了,一个文件一个文件实验,就找到了

谢谢大佬指正:joy:,请问大佬怎么能 hook installd 中的方法?给 installd 写一个 tweak,hook [MIClientConnection _doInstallationForURL:withOptions:completion:]这个方法,想拿到参数的信息,但是没有执行hook方法

参考 https://github.com/angelXwind/AppSync

参考了AppSync,但是 hook 方法还是不执行,试过了 MSHookFunction 和 Logos

#import <substrate.h>

void * (*old_symbol1)(void *, void *, void *);

void * new_symbol1(void * arg0, void * arg1, void * arg2) {
    NSLog(@"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
    NSLog(@"Hook!!!!!!!!!    %@", arg1);
    return old_symbol1(arg0, arg1, arg2);
}

void (*old_symbol2)(void *, void *, void *);

void new_symbol2(void * arg0, void * arg1, void * arg2) {
    NSLog(@"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
    NSLog(@"Hook!!!!!!!!!    %@", arg1);
    old_symbol2(arg0, arg1, arg2);
}

%ctor
{
    @autoreleasepool {
	
	    NSLog(@"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
	
	    MSImageRef image = MSGetImageByName("/usr/libexec/installd");

	    // void *symbol1 = MSFindSymbol(image, "__MIInstaller_initWithURL_options_forClient__");
	    void *symbol1 = MSFindSymbol(image, "initWithURL:options:forClient:");
	    if (symbol1) NSLog(@"Hook __MIInstaller_initWithURL_options_forClient__ !!!!!!!!!!");
	    MSHookFunction((void *)symbol1, (void *)&new_symbol1, (void **)&old_symbol1);
	
	    // void *symbol2 = MSFindSymbol(image, "__MIClientConnection__doInstallationForURL_withOptions_completion__");
	    void *symbol2 = MSFindSymbol(image, "_doInstallationForURL:withOptions:completion:");
	    if (symbol2) NSLog(@"Hook __MIClientConnection__doInstallationForURL_withOptions_completion__ !!!!!!!!!!");
	    MSHookFunction((void *)symbol2, (void *)&new_symbol2, (void **)&old_symbol2);
    }
}

你确定你注入进去了?