【版权所有,转载请注明出处。出处: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)

这时候观察eclipse的logcat的INJECT标签就会发现

观察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\n");
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项目地址

android加固系列—5.加固前先学会破解,hook(钩子)jni层系统api的更多相关文章

  1. android加固系列—2.加固前先要学会破解,调试内存值修改程序走向

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5138585.html] 因公司项目需要对app加固,经过本人数月的研究,实现了一套完整的仿第三 ...

  2. android加固系列—4.加固前先学会破解,无源码调试apk

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5138585.html] 项目关键java代码为,将tv设置为从jni读取的字符串,这里的破解内 ...

  3. android加固系列—3.加固前先学会破解,静态修改so

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5138585.html] 项目jni的关键代码(项目地址见文章底部),获取当前程序的包名com. ...

  4. android黑科技系列——获取加固后应用App的所有方法信息

    一.前言 在逆向应用的时候,我们有时候希望能够快速定位到应用的关键方法,在之前我已经详细介绍了一个自己研发的代码动态注入工具icodetools,来进行动态注入日志信息到应用中,不了解的同学可以查看这 ...

  5. android加固系列—6.仿爱加密等第三方加固平台之动态加载dex防止apk被反编译

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5402599.html ] 此方案的目的是隐藏源码防止直接性的反编译查看源码,原理是加密编译好的 ...

  6. Android拓展系列(11)--打造Windows下便携的Android源码阅读环境

    因为EXT和NTFS格式的差异,我一直对于windows下阅读Android源码感到不满. 前几天,想把最新的android5.0的源码下下来研究一下,而平时日常使用的又是windows环境,于是专门 ...

  7. Android Studio系列教程四--Gradle基础

    Android Studio系列教程四--Gradle基础 2014 年 12 月 18 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzhang ...

  8. Android Studio系列教程二--基本设置与运行

    Android Studio系列教程二--基本设置与运行 2014 年 11 月 28 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处! 上面一篇博客,介绍了Studio的 ...

  9. Android设计模式系列

    http://www.cnblogs.com/qianxudetianxia/category/312863.html Android设计模式系列(12)--SDK源码之生成器模式(建造者模式) 摘要 ...

随机推荐

  1. SURF算子(1)

    SURF算子,参考这篇文章的解释http://www.ipol.im/pub/art/2015/69/ SURF 是   Speeded Up Robust Features 加速鲁棒特征的含义. T ...

  2. 基于HT的CSG功能构建HTML5的3D书架

    构造实体几何CSG全称Constructive solid geometry,是3D计算机图形学中构建模型的常用技术,可通过合并Union.相减Subtraction和相交Intersction的三种 ...

  3. 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要三

    最近工作较忙,手上有几个项目等着我独立开发设计,所以平时工作日的时候没有太多时间,下班累了就不想动,也就周末有点时间,今天我花了一个下午的时间来继续总结与整理书中要点,在整理的过程中,发现了书中的一些 ...

  4. 如何安装RHEL7.2x64 即红帽7.2虚拟机?

                                                   虚拟机RHEL7.2x64的安装步骤   第一步:创建虚拟机 第二步:典型安装下一步: 第三步:创建空的硬 ...

  5. HTML的checkbox和radio的美化

    checkbox和radio的美化 checkbox: <style type="text/css"> input[type="checkbox"] ...

  6. Mysql日期统计函数简介

    NOW() 返回当前的日期和时间 CURDATE() 返回当前的日期 CURTIME() 返回当前的时间 DATE() 提取日期或日期/时间表达式的日期部分 EXTRACT() 返回日期/时间按的单独 ...

  7. 【C#】Excel舍入函数Round、RoundUp、RoundDown的C#版

    本人在C#中进行小数舍入的时候常常会怀念Excel中的Round.RoundUp.RoundDown这几个函数,原因就是后者“接地气”,比较符合俺小老百姓的舍入要求,啥“银行家舍入法”就让银行家用去吧 ...

  8. bootstrap学习笔记系列4------bootstrap按钮

    按钮标签 在<a>,<button>或input元素上使用按钮class.但是为了避免跨浏览器的不一致性,建议使用<button>标签. <!DOCTYPE ...

  9. linux下的C语言开发

    在很多人的眼里,C语言和linux常常是分不开的.这其中的原因很多,其中最重要的一部分我认为是linux本身就是C语言的杰出作品.当然,linux操作系统本身对C语言的支持也是相当到位的.作为一个真正 ...

  10. win10系统iis下部署搭建https (ssl/tls)本地测试环境

    有时想要把公司的某些XX项目部署成https站点,是为了在传输层加密传输,防止他人嗅探站点重要数据信息,平常我们使用的http方式都是明文方式传输的很不安全,容易被他人窃取.而有些时候要在本地搭建ht ...