逆向攻防的那点事

攻:

 用monkey将逆向的项目ipa导入其中,用hook你要重写或者修改的代码。


防:

创建类,在类中load方法中 fishhook 对 runtime的 method swizz 及 setIMP,getIMP函数进行替换,打入动态库,mokeyapp就不能hook了,


攻:

越狱手机中,用theos工具创建Tweak项目,tweak编辑plist需要hook的进程。hook中编写hook的方法,打入动态库。当程序启动时,苹果会通过plist找到进程,将动态库注入到项目中。


防:

在项目中other linker flags 增加 _RESTRICT _restrict,dyld有2种阻止动态库的代码,1,设置uid,gid,但是上线后是不允许改变,还一种就是dyld会遍历macho文件中_RESTRICT _restrict字段是否存在,存在就会阻止动态库的注入。


攻:

更改macho文件中的_restrict的二进制字段。


防:

通过第一种防护,另外通过dyld的阻止方法可以判断macho中是否存在_restrict,如果不存在,则程序退出。


防止别人调试:

通过syscls可以获取当前进程是否被操作,通过与操作获取控制码。

通过prace 有个拒绝连接(PT_DENY_ATTACH),如果有直接闪退。(支付宝就是这样进行防护的)。


攻:

首先在monkey中增加一个符号(prace或者syscls)断点,bt获取其地址,再imagelist获取指令的动态库首地址,算出偏移地址,再找到app中的防护动态库中的可执行文件,用hopper打开,找到算出来的偏移地址(获取的偏移地址是指向下一条指令)。对此函数的汇编代码进行修改后导出,直接将前三段bl跳转到倒数后三段,即跳过你防护的代码。如果是fishhook改变runtime的method swizz,改变汇编获取常量的偏移地址。


防:

1.代码混淆,在pch文件中对需要防护的类名及方法名用宏定义,对方用hopper及ida对macho文件是很难找不到其方法名及方法。

2.字符串加密,将字符串放到char数组中最后加上\0,并对每个字符进行异或操作,然后再char数组再进行一次异或回来。

3.隐藏CCCrypt,加密都会用到此函数,通过dlopen获取句柄(第一个参数是CCCrypt动态库路径,第二个参数以懒加载形式RTLD_LAZY),通过dlsym(第一个参数是句柄,第二个是字符串“CCCrypt”,此字符串需要用第二个字符串加密)将CCCrypt结构体替换成自己写的结构体。

4.使用汇编进行系统调用,防止符号断点调试进行定位汇编代码。通过asm链接汇编代码,通过汇编代码svc  #0x80触发中断。通过syscall头文件找到底层函数名对应的定义数值。如prace汇编

asm(

 "mov x0,#31\n"

 "mov x1,#0\n"

 "mov x2,#0\n"

 "mov x3,#0\n"

 "mov w16,#26\n"//26就是prase,上面四个是传入的参数

 "svc  #0x80"//触发中断

)

5.重签名防护 ,描述文件的组织单位,通过字符串截取出来进行比较,此方法把前四种全部加进去进行防护,对方很难进行逆向项目的。

6.利用防护工具,LLVM进行逻辑混淆,防止classDump。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,019评论 3 119
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,641评论 25 708
  • 屏蔽,多么冰冷的一个词。若不是心有隔阂,谁愿意在社交平台上去屏蔽别人? 上个月和经理去外地出差,他开车,我坐在副驾...
    阳光baby阅读 1,590评论 2 7
  • 体育
    哈嘿嘘嘘阅读 126评论 0 0
  • 中午在图书馆看了WeRun的排行,没有看到昔日称霸排行榜的K,就找他聊天。第一句话就是说他还待在宿舍,还故...
    uahuohz阅读 316评论 0 0