关注一款app很久了,这款app为了防止别人逆向破解拉取数据做了很多工作: 防止别人修改apk包,执行关键动作时对dex文件进行md5验证: 防止用户调用接口批量拉数据,对返回的web网页里个人信息进行加密,只有用户点击webview相关控件后,才js调用java代码通过jni调用底层native代码解密后,弹出toast显示个人信息: 我按照逆向工程一贯的思路: 1. 先apk转化jar,查看jar代码,被混淆了, 2. 混淆只是最低级层次的防护,费点时间,主要逻辑点还是能看出来的,理清逻辑后…
本文转载自:https://blog.csdn.net/AndroidMage/article/details/52225068 说明: 这里我根据个人工作情况说明在各个层打印log.如有问题欢迎拍砖. 1. Java层打印log.这个比较简单Android有封装好的Log.java, 可以使用.例如: Log.d(String Tag, String msg): 个人习惯: 单独写一个类包装一下:MLog.java: import android.util.Log; public class…
一.前言 在之前已经介绍过了Android中一款hook神器Xposed,那个框架使用非常简单,方法也就那几个,其实最主要的是我们如何找到一个想要hook的应用的那个突破点.需要逆向分析app即可.不了解Xposed框架的同学可以查看:Android中hook神器Xposed使用详解:关于hook使用以及原理不多解释了.今天我们再来看另外一个hook神器Cydia Substrate,关于这个神器网上也已经介绍了,应该有的同学已经使用过了,因为最近在破解一个游戏,奈何想hook他的一个so中的一…
1. SQlite概述 SQLite是一款轻量.快速.跨平台的嵌入式数据库,是遵守ACID(注:ACID指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability))的关系型数据库管理系统,它包含在一个相对小的C库中. SQLite 的设计目标是简单,从这种意义上说,SQLite 和其他很多现代的 SQL 数据库都不相同.SQLite 力求简单,即使这导致了它的某些特征偶尔执行效率比较…
1.简单介绍 本文解说在Android native层.root权限下.注射动态库到目标进程,从而hook目标进程中动态库的函数的实现方式. 文中的源代码所有来源于网络.我仅仅是略微加以整理. 环境:Android4.2 源代码下编译,模拟器中执行. 2.代码构成 包括三个模块的代码: 1.inject程序:把动态库libhookhelper注射到目标进程 2.libhookhelper:动态库代码.此部分代码用于改动目标进程中目标函数所在的got表的信息.从而替换掉目标函数. 理解这部分须要一…
前言 Android应用中JNI代码,是作为本地方法运行的.而大部分情况下,这些JNI方法均需要传递Dalvik虚拟机实例作为第一个参数.例如,你需要用虚拟机实例来创建jstring和其他的Java对象.查找类或成员变量等.大部分情况下,在你用JNI接口从Java层调用Native层中的代码时,你并不需要在native代码中自己初始化一个Dalvik虚拟机实例.但是,如果你在搞逆向或者写exp,你总是需要钻研各种非常规的情况. 最近,我在逆向时需要在native代码中手动创建虚拟机实例用于在JN…
 *本文系作者工作学习总结,尚有不完善及理解不恰当之处,欢迎批评指正* 一.前言 在NuPlayer中,可以发现许多类似于下面的代码: //=======================================// NuPlayerDriver::NuPlayerDriver(pid_t pid) : ...... mLooper(new ALooper) ......{ mLooper->setName("NuPlayerDriver Looper"); mLooper…
Binder 框架及 Native 层 Binder机制使本地对象可以像操作当前对象一样调用远程对象,可以使不同的进程间互相通信.Binder 使用 Client/Server 架构,客户端通过服务端代理,经过 Binder 驱动与服务端交互. Binder 机制实现进程间通信的奥秘在于 kernel 中的 Binder 驱动. JNI 的代码位于 frameworks/base/core/jni 目录下,主要是 android_util_Binder.cpp 文件和头文件 android_ut…
在Android的消息机制中.不仅提供了供Application 开发使用的java的消息循环.事实上java的机制终于还是靠native来实现的.在native不仅提供一套消息传递和处理的机制,还提供了自己定义文件描写叙述符的I/O时间的监听机制.以下我们从详细代码中分析一下. Native层的关键类: Looper.cpp.该类中提供了pollOnce 和wake的休眠和唤醒机制. 同一时候在构造函数中也创建 管道 并增加epoll的机制中.来监听其状态变化. Looper::Looper(…
前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载.但请保留文章原始出处:          CSDN:http://www.csdn.net          雨季o莫忧离:http://blog.csdn.net/luckkof 正文 [Description] 怎样在java/native层改动一个文件的权限(mode),用户(owner),组(group).以满足安全须要? [Keyword] 文件权限 文件用户 mode owner chom…
Servicemanager 源码在/frameworks/base/cmds/servicemanager/service_manager.c 编译成 systemmanager 可执行文件 systemmanager是以binder为主要通信手段,为系统各种各样服务的进行登记查询管理的服务. 系统服务的框架里有3个主要角色,服务提供者(server),服务使用者(client),和服务管理者(system manager),通信方式是Binder,在系统启动流程中的先后顺序是:服务管理者,服…
一.Java层加载so文件 Android在Java层加载so的接口是System.loadLibrary()逐级调用的过程: System.loadLibrary()系统源码: 987    public static void loadLibrary(String libName) { 988        Runtime.getRuntime().loadLibrary(libName, VMStack.getCallingClassLoader()); 989    } 例程 Syste…
有人说Android程序用Java代码写的,再怎么弄都是不安全的,很容易破解的,现在晚上关于应用加固的技术也很多了,当然这些也可以用于商业发展的,梆梆加密和爱加密就是很好的例子,当然这两家加固的Apk也是被很多geeker拿来练手和研究的主要对象,没有绝对的安全,只有相对的攻防.那么今天就来介绍一下关于Android中的加壳原理,当然这些技术是指大体上的原理介绍,和那些商业加固差距还是很大的,性能优化和加密难度上都是有差别的,开始今天的主题吧: 之前介绍了一篇关于Android中Apk加固的原理…
基于React技术栈构建开发前端项目,并使用React Native开发特赞移动APP 目前正在使用Node.js开发和维护特赞服务网关,希望Node.js能够在更轻量级的微服务架构中发挥重要作用 课程介绍: React Native在特赞的应用与实践 课程摘要: APP开发技术的选型 React Native开发过程中的主要问题 异常监控.热更新与RN性能优化 距离过年还有一个月不到,产品突然提出一个需求说,咱们要不做一个IOS应用吧,快过年了,给设计师一个新礼物吧.当时我的内心其它是拒绝的,…
流水车间调度算法分析的简单+Leapms实践--混合整数规划的启发式建模 清华大学出版社出版的白丹宇教授著作<流水车间与开放车间调度算法渐近分析>采用渐近分析方法分析多个NP-难类启发调度算法的收敛性,学术性很强. 本帖用数学规划模型方法对比精确模型和启发模型之间的差异,从实践角度感觉启发算法的魅力.本帖的要点如下: 1.有人说数学规划模型是精确方法.其实广义地讲,数学规划模型也可以是启发算法,只要你对问题进行启发建模就行. 2.启发建模会牺牲求解精确性,但是对NP-难问题来说,由于对大规模问…
/ testHtmlayout.cpp : 定义应用程序的入口点. // #include "stdafx.h" #include "testHtmlayout.h" #include "include/htmlayout.h" #pragma comment(lib,"lib/HTMLayout.lib") #define MAX_LOADSTRING 100 // 全局变量: HINSTANCE hInst; // 当前实…
原文地址:http://www.cnblogs.com/linguanh/    (滑至文章末,直接看解决方法) 问题起因: 前5天,因为项目里面有个类似 仿微信 视频录制的功能, 先是上网找了个 开源项目:https://github.com/qdrzwd/VideoRecorder,下载下来,在 debug 非混淆的模式下 测试了几次,觉得效果还不错,便在它的基础上进行了 二次开发. 于当天晚上整合好项目,准备第一次的混淆打包(release模式),然后第一次测试,结果,我意料中的事情发生了…
相信大家在日常开发中都要安全层面的需求,最典型的莫过于加密.而apk是脆弱的,反编译拿到你的源码轻而易举,这时候我们就需要更保险的手段来保存密钥之类的关键信息.本文就细致地讲解简单却实用的native手段,文中涉及部分jni的知识,但都有注释,浅显易懂,欢迎留言沟通.文末有示例代码地址. 目前ndk开发有三种编译手段: ndk-build.这是从eclipse时代就存在的一种编译方式,ndk-build是ndk开发包中的一个可执行文件,在这里不赘述,因为目前Android Studio已经普及,…
Binder底层是基于C实现的,因此可以作为Native进程与App层交互数据的渠道.其应用场景为:Native Service.Hal驱动设置.应用层JNI服务等. Android 4.4引入SEAndroid/SELinux 安全机制,至Android 5.0以后,Android完全采用此安全机制,对应用访问和操作文件权限进行限制,采用管道.共享内存.LocalSocket等方式进行跨进程交互面临着文件访问权限问题,若非修改固件源码的sepolicy文件(AOSP给定路径为/device/m…
一.Homebrew 是OS X 的套件管理器. 首先我们需要获取 Homebrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 1.我们可以先通过在终端输入: brew -v 如果没有安装就输入Homebrew的镜像路径去下载 2.拥有了brew,就可以通过它去下载一些依赖了,比如node,我们可以在终端输入:brew install node,如果…
编辑文件 vim .bashrc  (使改动在当前用户下有效) 或者 vim /etc/profile (须要在root用户下运行,使改动在全部用户下有效) 在文件结尾加入别名 alias cd1='cd ..' alias cd2='cd ../..' alias cd3='cd ../../..' alias cd4='cd ../../../..' alias cd5='cd ../../../../..' alias cd6='cd ../../../../../..' 保存文件退出 为…
使用android的breakpad工具 使用这个工具需要下载Breakpad的源码,然后进行编译,编译之后会生成两个工具 我们使用这两个工具来解析奔溃的位置.这里我们可以下载已经编译好的工具 下载地址是:链接:http://pan.baidu.com/s/1jIiU5cq 密码:wy6f 你把对应的工具下载完成后需要上传到对应的linux环境下才能使用 二.生成转换工具1.下载BreakPad源代码命令行输入:svn checkout http://google-breakpad.google…
最近工作中,需要开发一个功能----联网控制,这个功能其实用过root的安卓机应该都知道,禁止某个应用连接移动网络或者wifi. root后,通过su去执行iptable的命令就可以根据uid去控制应用联网权限 但是由于公司是做手机系统开发,手机生产出来不允许带有root权限,所以我们完成这个功能也是不可以使用root权限去实现的. 由于第一次做这种功能,刚开始我居然天真的以为系统中带有这种控制权限的接口,然后只有个Internet权限,无法区分数据流量和wifi. 嗯,直接上最终实现的方式.…
--------------步骤:0. adb root0. adb shell0. ps | grep browser1. gdbserver :5039 --attach pid2. adb forward tcp:5039 tcp:5039 1. prebuilts/gcc/linux-x86/arm/arm-eabi-4.7/bin/arm-eabi-gdb out/target/product/scx35l_sp9630ea/symbols/system/bin/app_process…
1. .project 文件 删除全部包括 org.eclipse.cdt前缀的xml结点元素.以下是一个包括cdt的完整编译配置文件. <?xml version="1.0" encoding="UTF-8"?> <projectDescription> <name>xapp</name> <comment></comment> <projects> </projects&g…
记录这个问题的起因是,在hook时遇到了修改内容长度,超过原长度时,会出现显示不全的问题. 比如把nexus 5改成nexus 100,只会显示nexus 1. 所以去读了下源码 int __system_property_read(const prop_info *pi, char *name, char *value) { unsigned serial, len; for(;;) { serial = pi->serial; while(SERIAL_DIRTY(serial)) { __…
int countByExample(BUserExample example); //根据条件查询数量 /** * 示例 * public int countByExample() { * BUserExample userExample = new BUserExample(); * BUserExample.Criteria criteria = userExample.createCriteria(); * criteria.andUsernameEqualTo("fan");…
作者|陈子涵 编辑|覃云 “一次编写, 到处运行”(Write once, run anywhere ) 是很多前端团队孜孜以求的目标.实现这个目标,不但能以最快的速度,将应用推广到各个渠道,而且还能节省大量人力物力. React Native 的推出,为跨平台的开发带来了新的曙光. 虽然 Facebook 官方 blog 的说法 React Native 支持“Learn once, write anywhere.”. 但经过开源社区的不断努力,React Native 已经可以达到“一次编写…
在tensorflow中的卷积和池化层(一)和各种卷积类型Convolution这两篇博客中,主要讲解了卷积神经网络的核心层,同时也结合当下流行的Caffe和tf框架做了介绍,本篇博客将接着tensorflow中的卷积和池化层(一)的内容,继续介绍tf框架中卷积神经网络CNN的使用. 因此,接下来将介绍CNN的入门级教程cifar10\100项目.cifar10\100 数据集是由Alex Krizhevsky.Vinod Nair和Geoffrey Hinton收集的,这两个数据集都是从800…
参考部分资料,编写一个简单的计算器案例,虽然完成了正常需求,但是也有不满之处,待后续实力提升后再来补充,先把不足之处列出: 1:本来打算只要打开页面,计算器的输入框会显示一个默认为0的状态,但是在输入框加入默认显示为0的时候,选择数据输入时,该0会显示输入数字的前面,例如”0123“,由于能力有限,待后续实力提升再来补充完善! 2:目前只能实现鼠标控制选择按钮,待完善键盘录入功能. 3:乘法的那个符号在本来想改成”ד这个符号的,待后续完善. 附图片一张: html部分: <!DOCTYPE h…