• android加固系列—5.加固前先学会破解,hook(钩子)jni层系统api


    【版权所有,转载请注明出处。出处:http://www.cnblogs.com/joey-hua/p/5138585.html】

    crackme项目jni的关键代码(项目地址见文章底部),获取当前程序的包名com.example.shelldemo和com.example.nocrack对比,正常运行结果是this app is illegal,这里的破解内容是hook strcmp函数来修改函数返回值来改变程序走向以达到running successfully。

    1.工具介绍

    Eclipse + ndk,编译jni源码

    cmd窗口

    2.准备工作

    手机root。

    在编译以下的c文件之前有个地方需要你自行修改,mystrcmp.c下的

     

    com.example.crackme-2有可能是com.example.crackme-1

    A.编译inject.c并传输

    Android.mk中输入,并编译生成inject

    LOCAL_PATH := $(call my-dir)  
    
    include $(CLEAR_VARS)  
    
    LOCAL_MODULE := inject   
    
    LOCAL_SRC_FILES := inject.c   
    
    LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog  
    
    include $(BUILD_EXECUTABLE)

     

    然后打开cmd命令窗口进入到文件的目录下并输入:

    adb push inject /data/local/tmp

    将文件inject推送到手机的/data/local/tmp目录下

     

    B.编译mystrcmp.c并传输

    Android.mk中输入,并编译生成libmystrcmp.so

    LOCAL_PATH := $(call my-dir)  
    
    include $(CLEAR_VARS)  
    
    LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog -lEGL  
    
    LOCAL_MODULE    := mystrcmp  
    
    LOCAL_SRC_FILES := mystrcmp.c  
    
    include $(BUILD_SHARED_LIBRARY)

     

    然后在命令窗口输入:

    adb push libmystrcmp.so /data/local/tmp

     

    3.开始hook

    首先在手机上启动crackme,然后在pc端打开一个新的命令窗口,并输入:

    adb shell

    su

    cd  /data/local/tmp

    chmod 777 *

    ps | grep com.example.crackme

    ./inject 3166(这里对应的是你进程的pid

     

    这时候观察eclipselogcatINJECT标签就会发现

     

    观察com.example.crackme

     

    表明注入成功了,并且找到了strcmp函数,完整的意思就是已经把我们的libstrcmp.so注入到进程com.example.crackme里了。并且把我们自己新写的strcmp函数的地址替换掉了系统的strcmp函数地址,请看关键代码:

    got_item = *(uint32_t *)(out_addr + i);
                        if (got_item  == old_strcmp) {
                            LOGD("Found strcmp in got
    ");
                            got_found = 1;
    
                            uint32_t page_size = getpagesize();
                            uint32_t entry_page_start = (out_addr + i) & (~(page_size - 1));
                            mprotect((uint32_t *)entry_page_start, page_size, PROT_READ | PROT_WRITE);
                            *(uint32_t *)(out_addr + i) = new_strcmp;

    现在其实已经成功了,那么就来运行吧,首先在命令窗口按回车

     

    然后在手机上点击按钮“检测是否被crack”

     

    这时调用了我们自定义的strcmp,并获得了传递过来的两个字符串参数,并且始终返回成功0,见关键代码:

     

    至此程序已破解。

    一个码农的日常 

    crackme项目地址

    Hook项目地址

  • 相关阅读:
    软件项目功能测试框架(转载自51Testing软件测试)
    【性能测试】服务器资源监测工具sar安装
    Fiddler对https抓包时,提示"HTTPS decryption is disabled."原因及破解
    Postgresql空库发布或者部分空库,模式,表处理备份流程
    PostgreSQL完整备份与还原过程
    Excel:一列是源值随机加减某随机值,变为另一列的数值
    Postgresql个人维护库时,出现有用户在连接又找不到这个用户是谁的强制中断连接的方法;
    切换或者用户登录时 出现 显示 -bash-4.2$ 问题 的解决
    postgresql 9.4.4 源码安装
    搜索项中,文案修改导致搜索无法使用
  • 原文地址:https://www.cnblogs.com/joey-hua/p/5146314.html
Copyright © 2020-2023  润新知