反调试方案:

我们最通常使用的动态工具是IDA, IDA的动态调试端口默认为23946,我们可以通过/pro/net/tcp 查看android 系统所有TCP Socket

启动android_server之后,/proc/net/tcp ,端口号是0x5D8A,十进制为23946

我们可以利用默认的调试端口23946 来实现反调试。实现代码如下, 实现原理: Android操作系统不允许一个IP可能同时存在多个相同的端口的套接字

 

 

解决方案:

最常见的解决的解决方案, 我们不使用默认转发端口23946。 android_server 提供命令指定转发端口
命令: ./android_server -p12345 ,注意端口号和参数之间没有空格
端口号变为0x3039,即12345
虽然这种做法很简单,但是对于一个崇尚简约的程序员而言,每次都要都要指定端口,烦不烦。我们能不能和之前的通过逆向android_server, 通过修改android_server的默认端口来永久改变端口号。不同IDA版本的android_server 使用指令集不太一样,比如IDA6.6 使用是ARM指令集, IDA6.8 使用的是Thumb指令集。不过修改方案是一致的, 笔者以使用Thumb指令集的IDA6.8的android_server.
1. IDA打开android_server, 找到main函数,如下:
对应的二进制指令代码

2.这里需要知道一点关于ARM指令的知识,这里的LDR R5, =5D8A, 一条伪指令, =5D8A指的指令和变量(存储值为5D8A)的相对偏移地址,这句为什么同一条ARM汇编对应16进制不一样了,因为指令地址不一样,导致偏移地址不一样。 按照惯例,这个存储5D8A的地址就在所在函数结束的后面.如下:

右侧有个DATA_XREF可知,这里有两处被应用,即两个伪指令LDR, R5, =0x5D8A的地址, 双击可以验证。
 
3.接下来我们用二进制编辑工具010 Editor 编辑文件偏移B8D8

将这个值改成我们指定端口号:12345(0x3039),保存,测试
 
3. 测试OK
 

浅谈android反调试之 转发端口的更多相关文章

  1. 浅谈android反调试之轮询TracePid(解决方案是特色)

    参考文章: 1.  http://bbs.pediy.com/thread-207538.htm 2.  http://www.wjdiankong.cn/android 需求: 常见的Android ...

  2. 浅谈android反调试之 API判断

    反调试:利用Java层API来判断Android程序是否是处于被调试下. 1.直接调用系统的android.os.Debug.isDebuggerConnected()方法 我们进行动态调试的时候,其 ...

  3. 浅谈Android反调试 之 PTRACE_TRACEME

    反调试原理: 关于Ptrace:  http://www.cnblogs.com/tangr206/articles/3094358.html ptrace函数 原型为:     #include & ...

  4. 浅谈android反调试之 签名校验

    反调试原理 很多时候,我们都需要进行修改修改应用程序的指令,然后重打包运行,重新打包就需要充签名. 利用签名的变化我们用于反调试.反调试实现代码如下: 为了更加隐藏,比较函数可能在SO层进行实现,如下 ...

  5. 浅谈Android应用保护(一):Android应用逆向的基本方法

    对于未进行保护的Android应用,有很多方法和思路对其进行逆向分析和攻击.使用一些基本的方法,就可以打破对应用安全非常重要的机密性和完整性,实现获取其内部代码.数据,修改其代码逻辑和机制等操作.这篇 ...

  6. 浅谈android代码保护技术_ 加固

    浅谈android代码保护技术_加固 导语 我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk,结果被人反编译了,那心情真心不舒服.虽然我们混淆,做到native层,但 ...

  7. 浅谈Android保护技术__代码混淆

    浅谈Android保护技术__代码混淆   代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为.将代码中的各种元 ...

  8. 安卓开发_浅谈Android动画(四)

    Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1.  ValueAnimator 基本属 ...

  9. 浅谈Android应用性能之内存

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 文/ jaunty [博主导读]在Android开发中,不免会遇到许多OOM现象,一方面可能是由于开 ...

随机推荐

  1. 2018.4.11 Java为何用xml做配置文件? 理由如下

    在Java世界里xml配置文件几乎是首选,xml有什么好的特性呢? 第一:xml能存储小量数据,仅仅是存储数据. 第二:xml可以跨平台,主流各种平台都对xml有支持, 真正的跨平台, 第三:xml读 ...

  2. PayPal为什么从Java迁移到Node.js 性能提高一倍 文件代码减少44%

    大家都知道PayPal是另一家迁移到Node.js平台的大型公司,Jeff Harrell的这篇博文 Node.js at PayPal  解释了为什么从Java迁移出来的原因: 开发效率提高一倍(2 ...

  3. Bootstrap历练实例:下拉菜单插件方法的使用

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  4. 01_3_创建一个Servlet

    01_3_创建一个Servlet 1.创建一个Servlet import java.io.IOException; import java.io.PrintWriter; import javax. ...

  5. NOIP复习之1 数学数论

    noip一轮复习真的要开始啦!!! 大概顺序是这样的 1.数学 2.搜索贪心 3.数据结构 4.图论 5.dp 6.其他 数学 1.数论 数论被称为数学皇冠上的明珠,他的重要性主要在于它是其他学习的祖 ...

  6. 【树形dp】bzoj4726: [POI2017]Sabota?

    找点概率期望的题做一做 Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属(直接或者间接, 不包括他自己)中叛徒占 ...

  7. Python3 简单封装 sqlite3 - SimpleToolSql

    #coding: utf-8 #Author:boxker #Mail:icjb@foxmail.com import sqlite3 import os class simpleToolSql(): ...

  8. Linux菜鸟起飞之路【十】进程管理

    一.基本概念 进程:程序的一次动态执行 守护进程:在后台运行并提供系统服务的进程 僵尸进程:完成了生命周期但却依然留在进程表中的进程,我们称之为 “僵尸进程” 父进程:指已创建一个或多个子进程的进程. ...

  9. 私有DockerHub搭建

    docker简介 一个开源的应用容器引擎,可以用来打包程序,可以包入依赖环境,这样只需要提供docker image即可,类似于虚拟机,但是更轻量级. 几个概念: Paas,platform as a ...

  10. 记一次低级错误导致的mysql(111)

    今天下午配好的双主多从服务器,两台主机+主机内安装好的6台虚拟机,两台Mysql master各授权好其slave的远程登录,原本好端端的能远程登录,晚上回来时候就发现其中一台master登录不上其s ...