Aurore💦
我不是Huai人的
关注数: 21
粉丝数: 164
发帖数: 5,240
关注贴吧数: 21
安卓逆向--c语言篇 通过对C语言的了解,能够编写简单的C代码,并且能够将.c文件编译成可执行程序,放在Android设备上运行。 通过JNI接口可以实现Java层与底层C/C++函数进行相互调用。掌握JNI静态注册和JNI动态注册,为后面的ARM汇编、IDA分析奠定基础。 了解C语言 C语言的诞生是现代程序语言革命的起点。今天C语言依旧在系统编程、嵌入式编程等领域占据着统治地位。C语言由丹尼斯.里奇开发,被称为C语言之父。 一:C/C++概念:当代最优秀的程序设计语言 C/C++是当代最优秀的程序设计语言。C语言是C++的基础,C++和C语言在很多方面是兼容的。 C语言是一个结构化语言,它的重点在于算法与数据结构。C语言用于嵌入式开发和程序结构优化。C++首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制。 所以C语言和C++的最大区别在于它们解决问题的思想方法不一样。 因为在后面的学习当中用到的都是C语言的内容,所以C++这部分内容不做过多讲解,感兴趣的可以去了解下C++语言。 二:C的令牌 C 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串值,或者是一个符号。 例如: #include <stdio.h> int main(){ /* 我的第一个 C 程序 */ printf("Hello World! \n"); return 0; } 在这里需要强调的是分号(“;”),在 C 程序中分号是语句结束符,跟汉语言里的句号(“。”)一个概念。它表明一个逻辑实体的结束,每个语句必须以分号结束。 三:注释 C语言有两种注释,分别是: 第一种:以“//”格式开始的是单行注释,这种注释可以单独占一行。 第二种:以“/* */”格式的注释可以注释单行或多行。 四:标识符 C标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。一个标识符以字母A-Z或a-z或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。 C标识符内不允许出现关键字及特殊字符,比如@、$和%。C是区分大小写的编程语言。因此,在C语言中Manpower和manpower是两个不同的标识符。 下表已列出10个有效的标识符:五:关键字 下表列出了C中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。六: C指针 指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。就像其他变量或常量一样,必须在使用指针存储其他变量地址之前,对其进行声明。 指针变量声明的一般形式为:type *yijindaxue; type 是指针的基类型,它必须是一个有效的C数据类型,yijindaxue是指针变量的名称,星号*用来声明指针,与乘法中使用的星号是相同的。但是,在这个语句中星号*是用来指定一个变量是指针。 下表是有效的指针声明:所有实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,对应指针值的类型都是一样的,都是一个代表内存地址长度为十六进制数。 实例:扩展名为.h的文件是头文件,它包含C函数声明和宏定义,能被多个源文件引用共享。头文件包含两种类型,一种是程序员编写的头文件,另一种是编译器自带的头文件。在程序中要使用头文件,需要使用C预处理指令#include来引用,stdio.h头文件,它是编译器自带的头文件。 七:结构体 1.结构体类型 结构体是一种构造类型,它由若干成员组成。其中每一个成员都可以是一个基本数据类型,或者是一个构造类型。 声明结构体时使用的关键字是struct,声明一种结构体的一般形式为: struct 结构体名{成员列表}变量名列表; 关键字struct表示声明结构体,其后的结构体名表示该结构的类型名,大括号中的变量构成结构的成员,也就是一般形式中的成员列表。 例如: struct date{ int year;//年 int month;//月 int day;//日}; 2.结构体变量 声明一个结构体相当于创建一种类型名,要使用新的类型名就要进行定义变量,定义的方式如下3种方式: (1)先声明结构体类型,再定义变量 例如:struct date date1; date是结构体类型,date1是变量名。 (2)在声明结构类型时,同时定义变量 例如: struct date{ int year;//年 int month;//月 int day;//日 }date1; (3)直接定义结构体类型变量 例如: struct { int year;//年 int month;//月 int day;//日 }date1; 类型和变量不同。只能对变量进行赋值操作,而不能对一个类型进行操作。 3.结构体变量的引用 对结构体变量进行赋值、存取或运算,实质上是对结构体成员的操作。 结构体变量成员的一般形式是:结构体变量名.成员名。 例如: date1.year=2020; date1.month=1; 4.结构体类型的初始化 结构体类型和其它基本类型一样,也可以在定义结构体变量时指定初始化值。 例如: struct date{ int year;//年 int month;//月 int day;//日 }date1={2020,1,20}; 5.完整的实例代码如下所示:八:共用体 共用体把几种不同类型的变量存放到同一段内存单元中,所以共用体在同一时刻只能有一个值,它属于某一个数据成员。由于所有成员存放在同一个内存中,因此,共用体的大小等于最大成员的大小。 定义共用体的类型变量的一般形式为: union 共用体{ 成员列表}变量列表; 例如: union data //定义共用体 { int num; //4byte char ch; //1byte float temp; //4byte }data1; 1.引用共用体变量 共用体变量定义完成后,就可以引用其中的成员数据进行使用。 引用的一般形式为:共用体变量.成员名; 例如: data1.num; Download Server; 2.共用体变量初始化 在定义共用体变量时,可以同时对变量进行初始化操作,初始化的值放在一对大括号中。 完整实例代码如下所示:3.共用体类型的数据特点 同一个内存段可以用来存放几种不同类型的成员,但每次只能存放其中的一种类型,而不是同时存放所有的类型。共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后,原有的成员就会失去作用。 共用体变量的地址与其他各成员的地址都是同一地址。 结构体和共用体的区别:结构体是定义一个由多个数据成员组成的特殊类型,而共用体是定义一块为所有数据成员共享的内存。 九:文件操作 文件(File)是指一组相关数据的有序集合。 所有文件都是通过流进行输入、输出操作的。流是一个数据字节的序列,流入程序的流称为输入流;相对地,流出程序的流称为输出流。 流==>(文本流、二进制流) //二进制流 010101。 文件==>(文本文件(ASCII)、二进制文件)。 文件内容==>(源文件、目标文件、可执行文件、头文件、数据文件等)。 普通文件:指驻留在磁盘或其他外部介质上的一个有序集合。 设备文件:指与主机相连的各种外部设部,如显示器、打印机、键盘。 1.文件基本操作 文件基本操作包括文件的打开和关闭,除了标准的输入、输出文件外,其它所有的文件都必须先打开,再使用,使用结束后,必须关闭该文件。 (1)打开文件 FILE* fopen(FILE* p,char* mode), 打开文件的操作就是创建一个流 。 (2)关闭文件 int fclose(FILE* p);调用fclose函数时会返回一个int值,当正常完成关闭文件操作时,返回值为0,否则返回EOF。 2.文件指针 文件指针是一个指向文件有关信息的指针,他们保存在一个结构体变量中。 3.文件结构体 typedef struct{short level; //缓存区的使用量 unsigned flags; //标志文件状态 char fd; //文件号 unsigned char hold; //无缓存区取消字符输入short bsize; //缓存区大小 unsigned char *buffer; //缓存区指针 unsigned ar* curp; //无活动指针unsigned istemp; //草稿文件标识 short token; //做正确性检测 }FILE; 4.文件读写操作 打开文件后,即可对文件进行读取和写入的操作。 fputc(字符,文件类型指针); 写字符函数 fgetc(文件类型指针); 读字符函数 fputs(字符串,文件类型指针);写字符串函数 fgets(字符数组,n,文件类型指针); 读字符串函数 fprintf(文件类型指针,格式字符串,输出列表); 格式化写入函数 fscanf(文件类型指针,格式字符串,输入列表); 格式化读取函数 fread(buffer,size,count,fp); 数据块读函数 fwrite(buffer,size,count,fp); 数据块写函数 5.定位文件 读写文件中的数据时,根据位置指针的位置来确定读写数据在文件中的位置。而所谓的的文件定位,是要能够根据读写要求移动文件内部读写位置指针。 fseek(文件类型指针,位移量,起始点):随机读写函数。 int rewind(文件类型指针:将文件指针重新指向一个流的开头。 long ftell(文件类型指针):返回当前文件指针。 小结:主要分享了C语言,对整个体系进行简单的介绍,需要掌握基本数据类型、指针、还有结构体与共用体以及文件操作常用函数。
android逆向系列--java签名校验与反编译 主要介绍两种简单的运行时签名校验的方法,和怎么绕开校验进行二次打包的方法;我们知道签名是Android软件的一种有效身份标识,因为签名所使用的秘钥文件是我们所独有的,而当我们app被重新打包后,app的签名信息势必会被篡改,所有我们就可以根据软件运行时签名与发布时签名的相同与否来决定是否需要将app中止运行;那么既然有此方法,为什么我们的软件还是会被破解呢?那是因为破解者在反编译app时,更改了我们的代码逻辑,让我们不能够正确的执行我们的原始校验代码,例如常见的改变if判断,返回错误返回值,校验方法被重新编写等,这都是破解者绕开校验的思路,也是我们在开发中需要考虑的问题。 Java代码签名校验 在这里简单介绍下,纯java逻辑的签名校验方法,Android SDK中提供了检测软件签名的方法,我们可以使用签名对象的hashCode()方法来获取一个Hash值,在代码中比较它的值即可,下面是获取当前运行时的签名信息代码接下来我们需要跟我们发布时的签名信息比较,在这里已经把Hash值MD5加密了Java代码classes.dex的crc32校验 通常重编译apk就是重编译classes文件,而代码重新编译后,生成的classes.dex文件的Hash值就会改变,所以我们可以检查程序安装后classes.dex文件的Hash值来判断软件是否被重新打包过。至于Hash算法MD5和CRC都可以,在这里就直接使用CRC算法获取当前运行的app的crc32值了有了当前的crc32值了,那么我们只需要将其与我们app发布时的crc32原始值做比较了,这是我们的java逻辑,R.string.classes_txt的值我们我们可以先随意赋予一个(不影响),随后AndroidStudio开始正式打包当打包成功后,我们获取apk的classes.dex的crc32值,随后将该crc32值赋予R.string.classes_txt,最后通过AndroidStudio再重新打包即可(因为更改资源文件并不会改变classe.dex的crc32值,改变代码才会)。获取classes.dex的crc32值的方法,我推荐使用 Windows CRC32命令工具 ,使用方法如下Java层面的校验方法都是脆弱的,因为破解者可以直接更改我们的判断逻辑以达到绕开校验的目的,所以我们只能通过增加其破解工作量,来达到一点点防破解的夙愿。我建议将crc32值或签名的hash值进行MD5加密,在代码中使用加密后的值进行比较,防止反编译后的全局搜索;我建议将签名校验与classes.dex校验结合起来使用,先进行签名校验,校验成功后将正确签名hash值作为参数去后台请求classes.dex的crc32值,再与当前运行crc32值进行比较;我建议进行多处校验,每处使用变形判断语句,并与其他判断条件组合使用,以增加破解时的工作量。 绕过Java代码签名校验 在这里我就只以签名校验来对破解思路做个介绍了,让我们在实战以前认认路,磨磨刀。如果反编译步骤还有不了解的可以先去参考上篇博客,首先我们将待编译apk通过apktool生成我们所需要的smali文件,这些文件会根据程序包的层次结构生成相应的目录,程序中所有的类都会在相应的目录下生成独立的smali文件然后我们通过dex2jar和jd-gui得到反编译出的java代码(往往都是已混淆的),不熟悉步骤的可以先去查看 上篇博客,这两种方式相辅相成,通过查看Java代码我们可以快速搜索出需要的Android API方法,再通过API方法的位置来定位到相应smali文件的大概位置一般java层面的签名校验都离不开signatures来获取签名信息,所以我们可以在jd-gui中全局搜索signatures关键字,找到获取签名的方法,当然如果app在校验失败前有着特殊的Toast提示或者Log信息那就更方便了随后打开我们查找到的signatures代码,一般情况下app都会进行多处校验随后我们顺藤摸瓜,找到f()方法被调用的地方,在这里就只拿jd-gui来试试水了,我们可以先通过AndroidManifest.xml文件找到Application和主Activity,一般在这里都会进行一些校验和身份状态的判断,改好一处之后,通过运行app,再根据app退出或者卡住的位置来定位下一处校验代码的位置,递归,直到运行成功。通过上面的语句我们可以知道,这只是一个简单的equals()比较,之后我们打开相应的smali文件,搜索"F010AF8CFE611E1CC74845F80266",定位签名校验的反编译代码位置在这里我们只需要将判断语句if-nezv0, :cond_1更改为if-eqz v0, :cond_1翻转逻辑即可,随后我们通过apkTool重新打包并签名,ok,运行成功。
Android逆向调试工具 说起Android 逆向,就不得不提到常用的逆向分析神器了,IDA,jadx,Android Killer,JEB。 但是jadx的缺点也很多,速度较慢,且不支持变量,方法重命名等等,在针对混淆代码分析时有些力不从心,这里就推荐另一款工具JEB。 1.JEB JEB是Android应用静态分析的de facto standard,除去准确的反编译结果、高容错性之外,JEB提供的API也方便了我们编写插件对源文件进行处理,实施反混淆甚至一些更高级的应用分析来方便后续的人工分析. 参考: 2. JEB动态调试apk JEB是一个功能强大的为安全专业人士设计的Android应用程序的反编译工具。用于逆向工程或审计APK文件,可以提高效率减少许多工程师的分析时间。 3. Android 动态调试原理浅析 首先简单总结下,目前在Android的动态调试主要有这么几种姿势: smali插桩 较为麻烦的方式,在smali代码中插入自己的代码来做log输出等达到调试的效果 IDA调试 IDA可以支持调试dex和so,但是并不能自由切换,经过尝试,可以通过开两个IDA分别调试dex和so来达到这个效果 JEB调试 2.2.x以上已经支持dex和so的完美调试,但是貌似不能调试so库中的JNI_Onload以及.init中的函数? gdb调试 gdb+gdbserver 可以用来调试so库 android studio调试 可以调试smali,可以调试ndk但是貌似不能在无源码的情况下调试so,都是通过插件的方式实现的貌似,具体没做尝试 andbug开源项目 貌似不是很好用,忽略 xposed hook 只能进行函数开始和结束地址处的hook?这个也需要尝试一下
有一个exe程序,如何快速逆向到源码并自己写一个? 想要逆向exe程序,需要的不仅是编程,还有深入了解汇编语言,掌握PE文件格式,和各种各样的API函数。更别说带壳和部分反破解的程序,而且只有一个人想逆向到源码,本身的工作量的不会少于1个月,更别说还要掌握一堆技能,逆向工程是更需要实践学习的,尤其是各方面的基础都要掌握,如果有这么多时间还不如看看近似的开源项目呢,模仿一个更简单。
互联网公司和硬件公司不断强化信息加密技术,这对提升公共安全有 互联网公司和硬件公司不断强化信息加密技术,这对提升公共安全有哪些帮助?
如何清除 Apk 中无用的资源文件? 并不是项目中没有用到的,而是项目中根本就没有的,IDE在大炮是后来添加上去的,拿一个举个栗子:上图是小Demo里用到的所有资源文件,只有10个图片,三个xml这个是发布的apk里面的资源文件,多了好多啊,就例如下图这些自己根本就没有用到.难道是按着自己添加的适配文件?? 求前辈解答这些文件到底何用,可以删除吗?如果可以如何删除??
有什么apk分析工具? 拿到了一个apk文件,怀疑不安全,在安装到手机之前,想分析下这个apk有没有恶意行为,或者,反汇编这个文件,求指教应该用什么分析工具?如果可以,最好可以附上可靠的下载链接。
Android 的 APK 中怎么放置反编译“炸弹”? Android 的 APK 中怎么放置反编译“炸弹”?
Android 的 APK 中怎么放置反编译“炸弹”? Android 的 APK 中怎么放置反编译“炸弹”?
26款优秀的Android逆向工程工具 1. SMALI/BAKSMALI 2. ANDBUG 3. ANDROGUARD 4. APKTOOL 5. AFE 6. BYPASS SIGNATURE AND PERMISSION CHECKS FORIPCS 7. ANDROID OPENDEBUG 8. DARE 9. DEX2JAR 10. ENJARIFY 11. DEDEXER 12. FINO 13. INDROID 14. INTENT SNIFFER 15. INTROSPY 16. JAD 17. JD-GUI 18. CFR 19. KRAKATAU 20. PROCYON 21. FERNFLOWER 22. REDEXER 23. SIMPLIFY安卓反混淆工具 24. BYTECODE VIEWER 25. RADARE2 26. JEB FOR ANDROID
26款优秀的Android逆向工程工具 1. SMALI/BAKSMALI 2. ANDBUG 3. ANDROGUARD 4. APKTOOL 5. AFE 6. BYPASS SIGNATURE AND PERMISSION CHECKS FORIPCS 7. ANDROID OPENDEBUG 8. DARE 9. DEX2JAR 10. ENJARIFY 11. DEDEXER 12. FINO 13. INDROID 14. INTENT SNIFFER 15. INTROSPY 16. JAD 17. JD-GUI 18. CFR 19. KRAKATAU 20. PROCYON 21. FERNFLOWER 22. REDEXER 23. SIMPLIFY安卓反混淆工具 24. BYTECODE VIEWER 25. RADARE2 26. JEB FOR ANDROID
逆向 什么是逆向工程? 逆向工程(又名反向工程,Reverse Engineering-RE)是对产品设计过程的一种描述。在工程技术人员的一般概念中,产品设计过程是一个从设计到产品的过程,即设计人员首先在大脑中构思产品的外形、性能和大致的技术参数等,然后在详细设计阶段完成各类数据模型,最终将这个模型转入到研发流程中,完成产品的整个设计研发周期。这样的产品设计过程我们称为“正向设计”过程。逆向工程产品设计可以认为是一个从产品到设计的过程。简单地说,逆向工程产品设计就是根据已经存在的产品,反向推出产品设计数据(包括各类设计图或数据模型)的过程。从这个意义上说,逆向工程在工业设计中的应用已经很久了。比如早期的船舶工业中常用的船体放样设计就是逆向工程的很好实例。 随着计算机技术在各个领域的广泛应用,特别是软件开发技术的迅猛发展,基于某个软件,以反汇编阅读源码的方式去推断其数据结构、体系结构和程序设计信息成为软件逆向工程技术关注的主要对象。软件逆向技术的目的是用来研究和学习先进的技术,特别是当手里没有合适的文档资料,而你又很需要实现某个软件的功能的时候。也正因为这样,很多软件为了垄断技术,在软件安装之前,要求用户同意不去逆向研究。 逆向工程的实施过程是多领域、多学科的协同过程。 为什么学习逆向工程? 在2007年初,我国相关的法律为逆向工程正名,承认了逆向技术用于学习研究的合法性。获悉这个消息,国内软件逆向界人士纷纷奔走相告,雀跃不已。众所周知,我国的软件产业落后于西方列强,甚至落后于邻国印度和日本,而这个举措意味着我国的软件研发人员如果利用逆向技术去研究学习国外一流软件的开发方法,那么我国的软件技术将会有极大的提升,此举何其开明也! 然而,逆向技术相关的培训实在少之又少,而各个大专院校虽然开设计算机相关专业,但是对此技术也尚未重视。社会上虽然涌现出大量软件开发培训机构,但是以培养软件蓝领为主要目标,对逆向技术更是避而远之。时下的IDE是极其优秀的,拜其所赐,市面上的程序员多出十几倍,但是又有多少能理解程序内部的机制呢?虽然很多人认为,去研究程序的内部原理,就是破坏了“黑盒子”封装性。但是如果只是能够在别人搭建好的平台上做开发,那么就只会被别人牵引技术方向,而自己始终只能追逐技术。如果我们能够充分掌握逆向分析的方法,就可以在一流的软件里直接学习各类先进技术,取长补短,为我所用。若如此,实为我国软件产业之幸事。 怎么学习逆向工程? 逆向工程是一个综合性和实践性很强的学科,最需要的是耐心和毅力。初学者往往一开始就拿一个成熟软件去反汇编分析,结果被海量的指令和错综复杂的流程搞得晕头转向,然后大多数人就中途放弃了。 最好从自己用汇编写的“Hello World”程序开始。然后在学习的过程中逐步将难度升级,一点点去看懂流程特性。等把汇编程序看顺眼了,就开始研究C/C++的流程特性,一边在老师的带领下去学习研究,一边勤做笔记、总结方法。几个月下来,就会形成属于自己的一套分析代码的风格或习惯,这样以来,任何软件在你眼中都没有了神秘感,只要你愿意投入时间去分析就一定会得到你所需要的知识
app可以被反编译到什么程度? android app可以被反编译到什么程度?可以看到所有接口请求规则吗?包括签名规则?包括签名的密钥?ios app可以被反编译吗?
最好的java反编译工具是哪个? 1、Java反编译插件 —— Jadclipse JadClipse是Jad的Eclipse插件,是一款非常实用而且方便地Java反编译插件,我们只需将下载的插件包复制到eclipse的plugins目录下,然后修改window -> Preferences -> Java -> JadClipse 下的Path to decompiler ,如:C:\pin\jadnt158\jad.exe,最后在Windows -> Perference -> General -> Editors -> File Associations中修改“*.class”默认关联的编辑器为“JadClipse Class File Viewer” 即可。 2、Java反编译工具 jad jad是一款使用非常广泛地Java反编译工具,上面这款Jadclipse就是基于jad的反编译插件,JAD 文件包含 MIDlet 套件的标题信息,例如开发应用程序的公司、应用程序名称和大小。 3、Java 反编译器 JD-GUI JD-GUI 是一个用 C++ 开发的 Java 反编译工具,由 Pavel Kouznetsov开发,支持Windows、Linux和苹果Mac Os三个平台。而且提供了Eclipse平台下的插件JD-Eclipse。JD-GUI不需要安装,直接点击运行,可以反编译jar,class文件。 4、Java反编译器 jdec jdec是一个Java反编译器。它能够把出现在一个.class文件中的字节码还原成Java源代码,反编译的结果几乎与原始Java文件相同。它还自带一个利用swing开发的用户操作界面。 5、uuDeJava uuDeJava是Java Class文件的反编译工具。反编译的Java源程序被输出到Class的相同目录。内部使用jad.exe。反编译Class文件时,可以直接点击Class文件(关联后),或者选中文件或目录发送到uuDeJava的快捷方式。还可以拖动文件或目录到uuDeJava的主窗口。 6、Java 反向工程软件 Minjava Minjava 是一个 Java 反向工程软件,可帮助理解已存在一些 Java 软件的架构和行为。 7、Java Decompiler 这款反编译器叫 “Java Decompiler”, 由 Pavel Kouznetsov开发,目前最新版本为0.2.5. 它由 C++开发,并且官方可以下载 windows、linux和苹果Mac Os三个平台的可执行程序。
读反编译代码会给我带来哪些进步? 看你是以什么方式去读? 如果是二进制,不管怎样,直接把一个函数反汇编来看,没什么意义。 如果你是从函数桢,局部变量,参数,返回值,三种程序结构,各种C结构,C++类,虚函数,继承都写一些小例子,然后看反汇编来体会一下,这种收获会非常大。基本上,很多C/C++栈的人看《C++对象模型》可能看很多遍都只是记得,并不会深刻理解,如果用这种方式操作一遍,就会非常清楚。 而且,加上不同的编译选项,可以体会到编译器的特性和原理,对自己定位问题能力会有非常大的提升。
避免APP被反编译 做代码混淆管用吗? 避免APP被反编译 做代码混淆管用吗?
谈谈C/C++的学习路线,发展方向? /C++学习路线, 史上最全面的C语言的学习路线及方法 随着互联网及互联网+深入蓬勃的发展,经过40余年的时间洗礼,C/C++俨然已成为一门贵族语言,出色的性能使之成为高级语言中的性能王者。而在今天,它又扮演着什么样重要的角色呢?请往下看: 后端服务器,移动互联网后端,经典Windows界面开发,移动互联网端界面开发,跨平台界面开发,图形分析,系统架构,应用设计,还有现在最为流行的分布架构等一些新的技术领域。 这么牛的语言,你是不是想知道怎样学习和掌握它呢?接下来请看整理过C/C++工程师必备知识的思维导图。UNIX下C语言的学习路线。 工具篇 “公欲善其事,必先利其器”。编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工具。 (一)操作系统 在UNIX或Linux系统中学习C很方便,所以在开始您的学习旅程前请先选择一个UNIX或Linux操作系统。 目前可供个人免费使用的UNIX或Linux系统有FreeBSD、RedHat Linux、SUSE Linux等,而且在安装包中还提供很多实用的工具,如:gcc, make等。 如果您一直使用Windows,身边又没有多余的机器安装UNIX,则可以使用VMware,通过VMware安装虚拟系统。 (二)编译工具 目前绝大多数Unix或Lnux系统都提供CC或GCC编译器,最简单的cc命令格式如下: cc -o hello hello.c 在unix shell环境中敲入上面的代码会将hello.c程序编译成可执行文件hello。 make 工具如 GNU make、System V make 和 Berkeley make 是用来组织应用程序编译过程的基本工具,但是每个 make 工具之间又有所不同。 大部分UNIX和Linux程序都是通过运行make来编译的。make工具会读取一个包含指令的文件(这个文件的名字通常都是 makefile 或 Makefile,不过后文中我们统一称之为 “makefile”),并执行各种操作来编译程序 (三)调试工具 最简单的调试工具:为你的程序添加打印语句 在你对程序的运行机制有了一定的了解后,你可以实用一些工具帮助你进行调试,当然你得学习一下这些工具得使用,如:dbx,gdb等。 还有一些内存工具可以帮你查找内存泄漏或缓冲区溢出等一些问题,如:memwatch,yamd等 (四) 其他工具 1. vi或vimUnix下文本编辑器。主要靠一堆命令来编辑文本文件,学Unix编程最好熟悉并熟练使用vi编辑器。当然在实际工作中,你可能需要一个集成编码环境或一个功能强大的图形化编辑工具。提供一个中文的vim在线手册:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fvcd.gro.clinux.org%2F&urlrefer=8237034d7d5115d5e59206278db3009b 2.netterm最著名的网络终端软件之一,可以使用它方便的连接到主机系统中。 3.Secure shell一个支持ssh协议得客户端工具,多数情况下用来连接linux系统。
信息安全专业选方向选渗透好还是逆向工程好? 首先信息安全专业就业行业广泛分布在:IT软件、电信运营、系统集成、IT硬件、互联网、电子技术、教育培训、金融投资、电信设备等行业。 在这么多行业里面为什么选择IT行业呢?这个相信大家都能看出来,现在生活处处都是互联网,都和互联网有关系,而互联网发达网络安全就至关重要,刚好你所说的渗透和逆向工程两个都属于网络安全方面的。 为什么学习网络安全这一块呢 国家政策扶持: 2017年6月1日国家安全法实施,安全法规定, 各企业针对自有业务服务器需要安全管理,各企业都会成立SRC,安全人员岗位会进一步扩 大,其中第71条规定,“国家加大对国家安全各项建设的投入,保障国家安全工作所需经费和装备,第二十一条和三十一条“国家实行网络安全等级保护制度”。 市场巨大: 年各安全厂商收入高达400亿左右,2017年调查对象(约210余家) 网络安全公司(360、 启明、绿盟、华为、安恒、知道创宇、深信服),其中深信服市值高达300多亿。 人才缺口大: 国内职业教育、技能教育缺乏导致网安人才的培养出现重大缺口。据测算现有网安人才市场需求高达70万人,而高校的学历教育培养的信息安全专业人才每年仅3万余人。 薪资高: 网安人才的匮乏,用人开出招聘薪资往往高于求职者的预期。从易锦教育的毕业人员工资测算,刚刚毕业的学生,入职薪资最低6000起。技术稍好10000- 20000月薪的学生也比比皆是。 靠能力说话: 在网络安全专业,专业技能竞争力要远高于学历本身。在网安专业只看能力不看学历也成了大家公认的原则。 那么是选择渗透还是逆向呢? 两个方向各有各的好,下面一一解答 逆向工程: 1.要求有编辑思维和基础,不需要精通能看懂基本的代码就可以了,当然你没有任何基础也是可以的,只是前期所花费的时间更多一些, 2.入门比较难,上手后会越来越顺利,一旦跨过这个门槛就会相对简单一点。所以逆向在前期所学习的知识是比较多的,基础扎实后续才能顺利进行, 3.逆向就业,现在逆向处于发展阶段前景是非常好的,这个岗位基本就是在一线城市,二三线城市也有只是比较少。 4.薪资,前面也说了现在处于发展阶段,需要的人才远远不够,公司要想招到人就会提高薪资,就目前一两万的不在少数 5.逆向这是一门技术,学起来肯定会有一定的难度,不是很建议自学,花费的时间比较多,成果可能还不是很好,所以要学习建议系统学习,能够系统的了解这一门课程以及学习方法和思路,加上现在报班基本都有就业推荐,对找工作也是比较好的。 渗透: 1.渗透入门快,后期难,这个和逆向刚好相反,但是渗透要学习的东西比较杂,什么都要会一点。 2.要想学好渗透,一定需要一个科学合理、循序渐进、第一原理驱动的学习路线,不能瞎折腾。 3.就业不难,现在很多公司都有渗透这一职位,要求就要看各家公司的具体情况了 4.对于现在的市场来说渗透也是个不错的选择,薪资待遇这一方面也还是非常不错的 总结:无论是学习逆向还是渗透都是看自己的选择,各有各的长短,当然你也可以选择两个都学习,整体提升一截,那又是另一个层次了。
如何学习软件逆向工程? 相关书籍:学习路线,不管你是零基础还是已经入门有一定基础的人,都可以按照这个思路来学习,是完全不会出错的 如果有需要详细版本的,私聊我
软件逆向工程目前的研究方向? 在软件构建进入工程化以来,软件的数量和质量得到大规模的提高,这无疑是软件的工程发展.相关的理论得到了很多人完善与发展.然而,也正是这样,大批量的恶意软件也在生产制造出来,威胁着互联网/个人信息的安全.对于恶意软件的防治,软件逆向是必不可少的.然而在软件工程下诞生出来的恶意软件,普通的软件逆向技术已经显得笨重.我们急需软件逆向工程的出现,我们需要工程性的方法与理论来去逆向恶意软件,这样才能在最短的时间里面理解恶意软件,并针对性的对其进行防治.怎奈何软件逆向工程的方法理论目前没有成形,或者说没有涌现出非常好的理论来应用于实践,没有系统性的理论方法.对于在软件逆向领域摸爬滚打的你来说,积累了那些理论方法去实践软件逆向工程?
app加密算法sign逆向。 这样的加密算法该如何下手。
安卓逆向之APP抓包 面上的抓包工具很多,其中最主要的两款就是Charles以及Fiddler,下面按照步骤讲一下Fiddler抓包工具的配置以及使用过程! 1.Fiddler软件的下载 自行百度下载Fiddler 2.配置Fiddler 2.1打开Fiddler:Tool -> options 按照如下图片配置3.设置Android手机 3.1打开cmd查看本机本地ip3.2打开模拟器设置WLAN修改网络设置4.下载Fiddler安全证书 使用Android手机的浏览器打开:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2F192.168.1.19%3A8888&urlrefer=dfd8d2a903d4f07934922c62c80f5b12, 点"FiddlerRoot certificate" 然后安装证书真机测试的方式和上边的类似。
盘点Android常用Hook技术 Android平台开发测试过程中,Hook技术是每个开发人员都常用的技术。可以用于绕过系统限制、修改别人发布的代码、动态化、调用隐藏API、插件化、组件化、自动化测试、沙箱等等。 Hook如果要跨进程修改,则需先提权注入目标进程中。本文主要盘点已经有Android进程权限后去如何hook修改运行时环境。例如:修改自己的进程。 Hook相关技术名词很多,如:Xposed、inline hook、GOT、Native hook等等,但是这些hook技术的适用范围和优缺点,想必很多人还不能解释的清楚。本文盘点这些技术的适用范围、优缺点、及基本原理。 为方便阅读,先给出结论如下表,后面再一一展开。Android进程结构 要了解hook技术,首先得了解Android进程的基本结构,进程中不同区域得用不同的hook技术去解决。构成如上图,Android本质是Linux系统,Android进程本质就是一个Linux进程。 进程由外层到里拆解: 首先,最外层是一个linux进程,动态链接了一堆动态链接库so,其中有名如:libc标准C函数库、webkit、openGL等。 Linux进程中主要运行的是ART/Davlik虚拟机,虚拟机包含Classloader、对象管理(内存管理)、线程调度等。虚拟机为JAVA提供运行时环境。 如果应用还包含navtive代码,native代码会和虚拟机一起在Linux进程中运行,两者是平行的关系 虚拟机中,包含JAVA FrameWork和应用JAVA代码两部分。 Android进程和其他进程交换数据,依赖于linux内核提供进程通信接口(驱动),如:Binder通信、Socket通信等等 hook就是去修改Android进程中的这些组件,达到某预期目的的过程。 Android进程Hook:反射/动态代理 如图中A点,作用于Java层。反射/动态代理是虚拟机提供的标准编程接口,可靠性较高。反射API可以帮助我们们访问到private属性并修改,动态代理可以直接从Interface中动态的构造出代理对象,并去监控这个对象。 常见的用法是,用动态代理构造出一个代理对象,然后用反射API去替换进程中的对象,从而达到hook的目的。如:对Java Framework API的修改常用这种方法,修改ActivityThread、修当前进程的系统调用等。 缺点:只在java层,只能通过替换对象达到目的,适用范围较小 优点:稳定性好,调用反射和动态代理并不存在适配问题,技术门槛低 JNI Hook 如图中B点,java代码和native之间的调用是通过JNI接口调用的,所有JNI接口的函数指针都会被保存在虚拟机的一张表中。所以,java和native之间调用可以通过修改函数指针达到。 优点:稳定性高 缺点:只能hook Java和Native之间的native接口函数 ClassLoader 如图中C点,java代码的执行都是靠虚拟机的类加载器ClassLoader去加载,ClassLoader默认的双亲委派机制保证了ClassLoader总是从父类优先去加载java class。所以一类hook方案就是通过修改ClassLoader加载java class的Path路径达到目的。常见的应用场景有一些热修复技术。 优点:稳定性高 缺点:需要提前编译好修改后的class去替换,灵活性降低了 Xposed相关 如图中D点,这类hook技术的原理都是去修改ART/Dalvik虚拟机,虚拟机为java提供运行时环境,所有的java method都保存在虚拟机一张Map维护,每个Java Method都有个是否是JNI函数的标志位,如果是JNI函数则去查找对应的native函数。所以,一个hook方案是通过把要hook的函数修改为JNI函数,然后实现一个对应的native函数从而达到hook。 大量的一些自动化测试、动态调试都采用这个方法 优点:java层所有的class都可以修改,Activity等都可以注入。灵活性极高。 缺点:ART/Dalvik每次Android系统发布大版本都会被大改,导致每个Android版本都要去适配配。稳定性变差。 前面hook技术都是去修改虚拟机中的java层,如果一个应用还包含Native code话,则得使用不同hook技术 GOT动态链接库hook 如图中E点,Android进程(linux进程)加载动态链接库的时候,都是通过dlopen()函数去把SO读入到当前进程中的一个内存区域中。当调用so代码时,直接跳转到so的内存区域去执行。so对外提供的函数表及函数地址也都在这块内存中。所以,一个hook方法是,修改这块函数地址,从而达到hook的目的。 例如native层的IO重定向,就可以通过这个技术hook libc的open read write等函数实现。 有大量的GOT注入库可以使用 优点:所有so的入口函数都可以被hook,稳定性高 缺点:替换后的函数签名要保持一致,只能hook so入口,无法hook so内部代码逻辑,且so的调用出现内联调用时(不查表直接跳函数地址)无法hook。 Inline hook 如图中F点,因为GOT技术的局限性,有些场景需要hook so内部函数。这就要用到inline hook技术。基本原理是在目标函数执行区域中插入Jump指令,使得cpu跳转到我们的hook函数(shellcode)中。如果我们的hook函数和原目标函数的签名不一致,还需额外保存寄存器信息,跳转回原函数时恢复寄存器信息。inline hook原理虽简单,但是实现起来需要处理的细节很多,因为是直接去改so,所以和指令平台强相关,armv7,armv8,arm64,x86, Thumb指令集都需要去针对性的实现。github中有大量的开源hook框架可参考使用,但稳定性值得考究。 Android进程通信hook Android进程和其他进程交换数据主要依赖于linux内核提供的进程通信接口。如:socket、Binder等等。所以,还存在一类hook这些通信接口的技术方案。 Binder进程通信hookBinder进程通信结构如图,是一种典型的Proxy代理接口。Client端通过Proxy向服务端Imp发送消息。Proxy和Imp实现同样的Interface。所以Binder通信都是可以利用动态代理技术去替换Proxy或Imp来达到监控Binder通信的目的。常见的如:hook AMS、WMS、IMS等服务。沙箱技术如VirtualApp、一些自动化监测技术常常用到。且稳定性较高 Socket通信hook Socket通信提供几个hook思路: 只hook Java层的调用,用Xposed类方案hook socket相关class就可做到 如果socket是client端,或者支持重新建立连接,某些场景可以构造自己的socket去conect,从而达到hook的目的 native层则要用户GOT hook IO重定向 思路: 简单的hook可以通过反射等手段修改Path达到 java层可以用xposed,但因xposed的缘故,稳定性欠佳 通用的方案是用GOT hook Libc达到重定向,java层和native都可以解决 Hook技术使用心得 hook方案的选择是一门学问,几个心得原则是: 从简,能用简单方案解决的用简单方案,切勿轻易增加复杂度。否则稳定性和后期的维护都可能得不偿失。 并不是越底层的方案越好,越底层的hook技术可能反而引入局限性。例如:Xposed修改所有的Activity很简单,但是只修改某个Activity就变得复杂,因为为了定位出这个特殊Activiy会引入一堆复杂度。
IT真的是最赚钱的行业吗? 是不是it行业都赚钱呢
安卓逆向算不算的上是黑客 学习到一定程度,算不算黑客呢
程序员职业生涯很短吗? 在知乎看见一个话题“程序员职业生涯很短吗?” 被浏览了1614056,有2,516个人关注 程序员从火到至今大概15年左右,撑死也就二十年吧 所以程序员这个行业还会火多久,谁也不知道,但是现在是不会衰落的 现在IT行业存在一个现象,在职的想跑,不明就里的想往进涌。 其实程序员这个职业,不短 为什么这么说呢, 放眼望去在it行业超过35岁的人还有很多,他们有一直在一线编程的、有做全栈的并不是到了一定年龄就全部辞退的。 我看好多回答说,程序员之所以干不长,那是因为经验不值钱,老程序员和年轻人没有区别,还不能加班,所以自然不受老板待见。 其实在程序员这个行业体力也是一个很重要的因素,因为程序员加班时间比较多 年龄大了体能肯定跟不上年轻人,这一点是毋庸置疑的。 但是说经验不值钱,这道理我个人觉得是不成立的,虽然程序员这个岗位更多的是属于板砖,因为大部分企业中的大部分程序员,在工作中都不会遇到独一无二的问题,我们碰到的问题,早就有了成熟的答案,所谓的研究过程,不是去发明答案,而是去发现答案。 那么,对老程序员来说,10年下来,工作中,学习中,只要勤于学习和积累,你的工作效率一定呈加速状态,无他,就是见得多了,积攒的多了。 同一个问题,年轻人需要去“研发”的工作,老程序员要做的可能就是翻出曾经的程序,找到文件,复制粘贴,稍作修改就可以提交了。 这种工作效率的提升,没有时间的积累,是根本不可能实现的。 所以说,程序员这个行业短不短完全取决于你自己的能力,与其在那抱怨,不如多去学习学习,增加自己的能力,就不会在这儿胡思乱想了
安卓逆向方法思路流程浅析 一、安卓逆向工程师 含义:安卓逆向工程师实际上是针对安卓手机应用做破解攻击,以达到测试 与逆向调试、安全分析,应用保护的效果。 方向:安卓逆向工程师在日常工作中会利用「反编译工具或手段」对市场上 大量的APP进行破解以加强应用的安全防护; 还有一类人则是通过逆向分析技术,对某些火热的APP进行破解,以 达到快速暴力盈利目的这种行径我们称之为“灰/黑色产业”。 二、技术的基本流程工作形式 App通过安卓到手机/模拟器,然后利用工具分析可利用的漏洞 ,进而分析它的保护机制进行破解,破解成功以后应用方向,安装回手机上或模拟器上正常使用并提交漏洞给开发商,或者就是灰黑商人招纳技术制作相应的功能软件,通过传播获利。 技术无罪,安全当先,先学会攻击才能更好的防护。 三、技术的具体应用形式 我们所使用的APP都是在安卓系统里面才能运行的,所以我们会看到日常用 的安卓机、电视盒子、车载系统基本都是安卓系统;而我们的安卓逆向课程 主要就是针对安卓系统上的APP应用做破解 反编译流程:apk安装包解析加密文件,通过反编译(smali代码,java代码,ARM代码,c/c++/C#代码)利用工具修改和分析代码,如果无法继续分析,则apk存在访破解,有想要的保护机制 四、分析工具有哪些? JAVA层反编译及修改工具:Androidkiller+Apktool、JEB、Android逆向助手、Jar-adx、 Jd-gui、CE内存修改器、GG修改器、MT文案管理器等 A、jd-gui 反编译jar,查看class文件的对应的源码,通过命令 apktool d my.apk 反编译apk文件,解压之后,可以查看AndroidManisfast.xml文件等配置信息,res资源,asset资源等。通过命令sh dex2jar.sh classes.dex将apk文件中解压出来的dex文件转换为jar文件。然后通过jd-gui可以打开jar文件,就可以查看class文件对应的源码了。 B、AndroidKiller+apktool:可以直接反编译app,进行资源文件和修改smali代码达到java层逆向分析功能 C、jeb:可以反编译查看,但是无法修改 注解:我们大多数的应用都是由JAVA代码完成,但我们是不能直接去看程序员写的代码的,只 能间接的通过工具去查看java代码,想实现修改的效果,就得去分析修改java代码的“同 胞兄弟”---Smali代码,这种代码可以通过上述工具去查看获得。 So层分析及抓包工具:IDA+IDApro、fiddler抓包、burpsute抓包、Wpe抓包、WireShark 抓包、WinHex进制修改分析器、各种自动化脱壳机等。 A.底层交互协议: 我们大多数的应用都是由JAVA代码完成。但APP仍需和安卓操作系统进行通讯交流,所以 JAVA层代码会与So代码进行交互。使得我们写的代码可以被系统识别和认可,上述工具可 以对so层进行分析。 注解:这就像是我去餐馆吃饭,可以把我们看成JAVA代码,而服务员是链接我们和厨房进行沟通 的桥梁,我们想吃什么,问什么东西好吃,都需要告诉服务员,通过服务员把信息传给后 厨,厨师就是So层,他们会把我们的需求制作展示出来,最后再由服务员把菜品端上我们 的桌子。 B.联网通讯协议:我们的APP也需要和服务器端也就是和其他使用这个APP的人进行通讯,比如说我们使用的 抖音,我们能看到别人的作品,是因为别人把制作的作品由APP传给了服务器,服务器再根 据大家喜欢看的和关注的,推送不同的作品到你的APP上。 [逆向要做的就是去截取服务器和APP之间传输的内容] :比如我想批量给一个人点赞10W次,我就可以先用抓包工具抓到这段密文A 然后反编译抖音APP,去除或者绕过密文的加密锁。 这些加密锁会分散存放在JAVA层和So层,所以才需要我们分析这些代码 最终解开密文。 我们得到报文后,就可以不受限制的去注册10W个小号。 还可以写一个软件,批量的把10W个账号全部导入自己的软件,输入想要刷 赞的抖音号和作品ID,即可实现批量化的刷赞了!
安卓逆向 | 混淆严重的时候如何找到具体的网络通信的代码位置 能否给个详细解答
关于软件逆向工程,病毒分析这块前景,工作如何? 现在是逆向还不错,工作应该挺好找的吧
学了逆向可以找到什么样的工作? 安全公司工作 自己做项目 安卓逆向工程师 互联网公司都需要做安全的人能找的工作,挺多多的啊 木马分析,病毒查杀,或者其它依赖于逆向或破解软件的工作。
为什么adobe的软件很容易就可以被破解?
软件破解的原理是什么 ?
35的程序员会被辞退,35的程序员呢? 35的程序员会不会也被辞退
网上很多易锦教育的课程,真的还是假的? 感觉易锦教育的课程网上到处都是,都是真的吗?
常见的抓包工具 种抓包工具的对比 一、httpwatch: 1. httpwatch与IE和firefox浏览器集成,但不支持chrome;httpwatch界面清晰直观,发送请求后可以快速简单的查看Cookies, Headers, Query Strings and POST data,能够通过页面分组处理多页面场景。 2. 实时分级时间展示图能够展示一个http/https请求的处理过程;通过不同的颜色展示网络请求计时,如DNS查询,tcp连接;以瀑布形式展示浏览器事件,例如从浏览器渲染和页面加载计时就开始了,可以自动检查性能问题。 3. 安装简单,不需要设置代理和证书;提供接口API可以被大部分编程语言自动化调用、录制、保存结果。 4. 但只能看不能修改 二、Fiddler: 1.Fiddler是一个独立的应用,可以调试PC、Mac或Linux系统和移动设备的之间的通信,支持大部分框架如java、.net、java、Ruby,需要设置代理。 2.能够暂停Http通讯,并且允许修改请求和响应方便进行安全测试,也可以设置检查点做功能测试。 3.通过暴露HTTP头,用户可以看见哪些页面被允许在客户端或者是代理端进行缓存。如果要是一个响应没有包含Cache-Control头,那么他就不会被缓存在客户端。 4.可以通过Composer进行接口测试。 三、科来网络分析系统 1.科来网络分析系统是一款专业的通过抓取网络数据包进行网络检测,网络协议分析工具,可实时监测网络传输数据,全面透视整个网络的动态信息。除了能实时检测每台电脑的上网情况,邮件收发情况,网络登录情况,网络流量外,还具有强大的数据包解码分析功能,可诊断网络故障,定位网络瓶颈,检测网络安全隐患,支持多种协议。 2.一般用于抓取其他协议包 四、firebug 1、Firebug是firefox下的一个扩展,它除了能进行网络分析还能够调试所有网站语言,如js、Html、Css等,支持各种浏览器如IE、Firefox、Opera,、Safari。 2. Firebug是开源工具,能够将页面中的CSS、javascript以及网页中引用的图片载入所消耗的时间以矩状图呈现出来,方便我们对网页进行调优。 3.Firebug编辑、删改任何网站的CSS、HTML、DOM 以及JavaScript 代码,可以通过小箭头定位页面元素。
常用的脱壳方法 一、概论 壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳两种 UPX ASPCAK TELOCK PELITE NSPACK … ARMADILLO ASPROTECT ACPROTECT EPE SVKP … 顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,加密壳是程序输入表等等进行加密保护。当然加密壳的保护能力要强得多! 二、常见脱壳方法 预备知识 1.PUSHAD (压栈) 代表程序的入口点, 2.POPAD (出栈) 代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近 3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以立刻脱壳。 方法一:单步跟踪法 1.用OD载入,点“不分析代码!” 2.单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现!(通过F4) 3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选) 4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现! 5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP 6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入 7.一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。 Btw:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键–>“跟随”,然后F2下断,Shift+F9运行停在“跟随”的位置,再取消断点,继续F8单步跟踪。一般情况下可以轻松到达OEP! 方法二:ESP定律法 ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!) 1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)。(这只是一般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值) 2.在命令行下:dd XXXXXXXX(指在当前代码中的ESP地址,或者是hr XXXXXXXX),按回车! 3.选中下断的地址,断点—>硬件访—>WORD断点。 4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP。 方法三:内存镜像法 1:用OD打开软件! 2:点击选项——调试选项——异常,把里面的忽略全部√上!CTRL+F2重载下程序! 3:按ALT+M,打开内存镜象,找到程序的第一个.rsrc.按F2下断点,然后按SHIFT+F9运行到断点,接着再按ALT+M,打开内存镜象,找到程序的第一个.rsrc.上面的.CODE(也就是00401000处),按F2下断点!然后按SHIFT+F9(或者是在没异常情况下按F9),直接到达程序OEP! 方法四:一步到达OEP 1.开始按Ctrl+F,输入:popad(只适合少数壳,包括UPX,ASPACK壳),然后按下F2,F9运行到此处 2.来到大跳转处,点下F8,到达OEP! 方法五:最后一次异常法 1:用OD打开软件 2:点击选项——调试选项——异常,把里面的√全部去掉!CTRL+F2重载下程序 3:一开始程序就是一个跳转,在这里我们按SHIFT+F9,直到程序运行,记下从开始按SHIFT+F9到程序运行的次数m! 4:CTRL+F2重载程序,按SHIFT+F9(这次按的次数为程序运行的次数m-1次) 5:在OD的右下角我们看见有一个"SE 句柄",这时我们按CTRL+G,输入SE 句柄前的地址! 6:按F2下断点!然后按SHIFT+F9来到断点处! 7:去掉断点,按F8慢慢向下走! 8:到达程序的OEP! 方法六:模拟跟踪法 1:先试运行,跟踪一下程序,看有没有SEH暗桩之类 2:ALT+M打开内存镜像,找到(包含=SFX,imports,relocations) 内存镜像,项目 30 地址=0054B000 大小=00002000 (8192.) Owner=check 00400000 区段=.aspack 包含=SFX,imports,relocations 类型=Imag 01001002 访问=R 初始访问=RWE 3:地址为0054B000,如是我们在命令行输入tc eip<0054B000,回车,正在跟踪ing。。 Btw:大家在使用这个方法的时候,要理解他是要在怎么样的情况下才可以使用 方法七:“SFX”法 1:设置OD,忽略所有异常,也就是说异常选项卡里面都打上勾 2:切换到SFX选项卡,选择“字节模式跟踪实际入口(速度非常慢)”,确定。 3:重载程序(如果跳出是否“压缩代码?”选择“否”,OD直接到达OEP) Btw:这种方法不要滥用得好,锻炼能力为妙。 壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳两种 UPX ASPCAK TELOCK PELITE NSPACK … ARMADILLO ASPROTECT ACPROTECT EPE SVKP … 顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,加密壳是程序输入表等等进行加密保护。当然加密壳的保护能力要强得多! 二、常见脱壳方法 预备知识 1.PUSHAD (压栈) 代表程序的入口点, 2.POPAD (出栈) 代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近 3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以立刻脱壳。 方法一:单步跟踪法 1.用OD载入,点“不分析代码!” 2.单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现!(通过F4) 3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选) 4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现! 5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP 6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入 7.一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。 Btw:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键–>“跟随”,然后F2下断,Shift+F9运行停在“跟随”的位置,再取消断点,继续F8单步跟踪。一般情况下可以轻松到达OEP! 方法二:ESP定律法 ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!) 1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)。(这只是一般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值) 2.在命令行下:dd XXXXXXXX(指在当前代码中的ESP地址,或者是hr XXXXXXXX),按回车! 3.选中下断的地址,断点—>硬件访—>WORD断点。 4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP。 方法三:内存镜像法 1:用OD打开软件! 2:点击选项——调试选项——异常,把里面的忽略全部√上!CTRL+F2重载下程序! 3:按ALT+M,打开内存镜象,找到程序的第一个.rsrc.按F2下断点,然后按SHIFT+F9运行到断点,接着再按ALT+M,打开内存镜象,找到程序的第一个.rsrc.上面的.CODE(也就是00401000处),按F2下断点!然后按SHIFT+F9(或者是在没异常情况下按F9),直接到达程序OEP! 方法四:一步到达OEP 1.开始按Ctrl+F,输入:popad(只适合少数壳,包括UPX,ASPACK壳),然后按下F2,F9运行到此处 2.来到大跳转处,点下F8,到达OEP! 方法五:最后一次异常法 1:用OD打开软件 2:点击选项——调试选项——异常,把里面的√全部去掉!CTRL+F2重载下程序 3:一开始程序就是一个跳转,在这里我们按SHIFT+F9,直到程序运行,记下从开始按SHIFT+F9到程序运行的次数m! 4:CTRL+F2重载程序,按SHIFT+F9(这次按的次数为程序运行的次数m-1次) 5:在OD的右下角我们看见有一个"SE 句柄",这时我们按CTRL+G,输入SE 句柄前的地址! 6:按F2下断点!然后按SHIFT+F9来到断点处! 7:去掉断点,按F8慢慢向下走! 8:到达程序的OEP! 方法六:模拟跟踪法 1:先试运行,跟踪一下程序,看有没有SEH暗桩之类 2:ALT+M打开内存镜像,找到(包含=SFX,imports,relocations) 内存镜像,项目 30 地址=0054B000 大小=00002000 (8192.) Owner=check 00400000 区段=.aspack 包含=SFX,imports,relocations 类型=Imag 01001002 访问=R 初始访问=RWE 3:地址为0054B000,如是我们在命令行输入tc eip<0054B000,回车,正在跟踪ing。。 Btw:大家在使用这个方法的时候,要理解他是要在怎么样的情况下才可以使用 方法七:“SFX”法 1:设置OD,忽略所有异常,也就是说异常选项卡里面都打上勾 2:切换到SFX选项卡,选择“字节模式跟踪实际入口(速度非常慢)”,确定。 3:重载程序(如果跳出是否“压缩代码?”选择“否”,OD直接到达OEP) Btw:这种方法不要滥用得好,锻炼能力为妙。
学了逆向工程,能找哪些公司的什么岗位? 看了一下很多公司的招聘岗位,从BAT到安全类的公司,有要求逆向工程方面的能力的很少,所以想请教一下大家,学了逆向工程之后,该去哪些公司找什么岗位的工作呢?
学习逆向编程难吗?要怎么开始? 学习逆向编程难吗? 逆向编程是一门技术,不能说它难不难,也就是说只要你想学,就一定能学。每个人的逻辑思维能力不同,兴趣点也不同。有些人会觉得很容易,有些人会觉得有点难。 在技术领域,逆向编程的入门门槛很低,互联网上有很多信息,如果你想有所作为,就必须专注于此。 所以请先问问自己,你想学逆向编程吗?你喜欢吗?如果你觉得你对逆向编程感兴趣,想知道软件或网站的运行情况,那么就不要再问这个问题了,去学就好了。
逆向分析,为什么要学习smali,直接反编译成java语言不可以吗? 学习Smali有一下几点好处: 1、修改Smali代码 2、调试Smali代码 3、增加知识 很多人都停留在静态分析阶段,也就是说只会用JEB啊,AK之类的工具,实际上调试是逆向中很重要的一部分,我一般用IDEA+Smali调试,非常方便,总之,我没有听说过谁能用反编译后算出来的源码进行调试的。 修改代码吧,这个也必须基于Smali,想破解游戏内购就必须会这玩意,我也没有听说过谁改改Java代码就修改了游戏逻辑~ 另外,Smali汇编其实一门很简单的汇编,比起CPU的原生汇编来说简单太多了,只要有自信,几 个小时入门是没有问题的!
安卓逆向JEB工具介绍及使用 JEB是一款为安全专业人士设计的功能强大的Android应用程序反编译工具。用于逆向工程或审计APK文件,可以提高效率,减少工程师的分析时间。 JEB工具包下载 链接:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fpan.baidu.com%2Fs%2F1zfFQFC66wp2bf4l4IJDIvQ+&urlrefer=48421674a32367a0b1a0f36d65b5af63 提取码:t7ke 一. 了解JEB工具常用功能 1.下载完成后进行解压,解压完成后打开文件夹,会看到很多文件夹,这里选择一个.bat后缀的文件,如下图所示。双击.bat文件,弹出一个cmd命令窗口,等待启动。等待一会,如果出现JEB的面板,就说明JEB工具成功打开了。有些cmd窗口会提示检查更新出错,这是版本的一个bug,可以忽略,并不影响我们的使用。如下图所示。思考:如果等待一会并没有出现JEB面板,应该怎么解决? 此时,就要检查一下JDK环境是否配置了“JAVA_HOME”,如图7.3所示。如果已经配置,就要检查配置的路径是否正确以及检查jdk版本是否过高。2.菜单栏的使用: 文件:文件的打开、导入、保存、另存为等操作。 编辑栏:文件的复制粘贴、搜索、语言设置、style设置字体、选项设置等操作。 行为栏:包含了快捷键操作 ①Q:转换成伪代码 ② /:添加注释 ③ N:重命名 ④ Delete:删除 窗口:窗口显示的相关设置,使用默认即可。 帮助:官方的相关信息。 工程文件以及基本信息在工程栏信息展示,如下图所示的窗口。这个窗口是日志输入窗口,展示一些程序的日志信息输入,如下图所示。小结 主要讲解了Jeb工具的安装和Jeb基本功能以及一些快捷键操的使用。
没有学历的程序员上限很低吗? 第一点:程序员确实对学历要求不高? 很多人说程序员不要求学历,有能力就行。嗯,这话对也不对,对是因为相对于你的技术能力和项 目经验,它确实会把学历放在第二位去考察。不对是因为,如果你没啥突出的精力或过硬的技术, 那么学历就会显得尤为重要,尤其是在你找第一份工作的时候。 第二点:学历能否决定你的发展上限? 决定不了,你的发展上限是根据你个人能力而定的,程序员这个行业相对单纯,能力强,你的上限 就高,能力弱,你的上限就低,别无其他。 第三点:学历真的只是一张纸么? 其实第二点应该和第三点结合来看。为什么现实中一些人误以为自己发展不好是学历决定的呢?是 因为他们会看到,大多数学历好的,学校好的,都在华为,阿里等大厂工作,即便去了小公司也会 得到领导重用。于是就误认为这一切都是学历决定的。 其实不是,第二条已经说了,这一切是能力决定的,和学历无关。 问题在于,学历真的只是—张纸而已么? 不!它不是,它是—个人学习能力的代表。 你不会忘记别人为什么能考上清华北大,自己只能屈居二本甚至专科了吧? 你不会忘记大学时代别人早出晚归在图书馆学习,自己在宿舍打游戏了吧? 这些之所以能读好学校,能拿高学历,那是人家靠强大的学习能力换来的! 你不会天真的以为,他们的学习能力在参加工作后就烟消云散了吧? 就是那—纸文凭,完全反应了你的学习能力,而学习能力决定了你未来的发展上限。
有Java基础该如何学习安卓开发? 一、 Android开发,假如开始没有任何的开发经验的话, 千万不要着急,不要想着在短时间内就把一个语言学习好, 因为你之前没有任何的学习经验, 在这个过程中需要有耐心地学习完JAVA的基础知识, 然后才开始踏上Android开发之旅。 (你有Java基础可以跳过这一步骤) 若之前做过JAVA开发经验的,这类同学可以在Android上迅速上手,但是同样的是不可忽略Android的一些基础知识,只有把基础掌握好了,才能在后期取得大的进步。 二、Android基础知识学习 在掌握好JAVA基础知识后, 接下来就是学习Android基础知识和如何查看开发文档了, 在这个阶段我认为是学习最有劲头和最有收获的时候, 因为从一无所知到了解是会让人有收获良多的感觉, 事实上在这一阶段也是学习了很多,至少知道如何建立工程, 知道一些基本的机制很常用函数的用法, 这个阶段会出现很多的问题, 往往一个很低级的问题都会把你难倒, 而这阶段正式培养学习能力的好时机, 提醒一句,凡是遇到问题第一个想的是自己去解决, 自己解决不了的,用百度用谷歌,要学会使用搜索引擎, 大部分的时候问题都能得到解决, 因为你遇到过的问题也学别人早就遇到过了, 假如搜索引擎也找不到好的答案,这时候可以到论坛发帖问, 或者找一些培训机构的助教老师咨询 网上牛人很多,也可以选择到相关群里咨询 三、Android开发进阶 学习完Android基础知识以后,很多同学很快就会感觉到学习停步不前, 感觉自己似懂非懂,(如论学什么问题都会有有个瓶颈期,这是正常的) 但我觉得这个时候是学习最关键的时候, 因为一旦你踏出这一步之后,你对Android的理解就会跟更加透彻, 做起开发也会更加有信心, 但是怎样跨过这一阶段? 首先是保持对自己的信心, 自己找一个比较简单的项目做做或者找一些应用的源代码研究研究, 然后自己山寨出来一个,这样你也会有了学习的方向, 因为你在了解了基础知识以后急切需要证明一下自己到底是学到了什么东西, 而开发出一个自己的简单应用,就是最大的证明了,而且在开发应用的时候, 肯定会遇到很多的问题,而在独立解决bug的同时, 你已经掌握了独立处理问题的能力 四:Android开发转Android逆向 在这个瞬息万变的市场,多学习一项技能是很有必要的。 而安卓逆向是在安卓开发基础上进阶的一个技能,可以为自己的技能得到一个很大的提升 就业方面也会多一个选择,薪资也会有一个跳跃, 对于在安卓开发深耕多年想换工作或者跳槽的人,是一个非常不错的选择 现在安卓逆向这个市场也是非常大的和安卓开发不一样的是, 安卓开发已经发展近十年左右,逆向是一个新兴行业 两者在市场方面还是有很大区别的, 而随着移动互联网的兴起,“APP”成了99%的互联网企业主要运营的产品 例如知名的“支付宝”、“美团”、“滴滴”、“抖音”等 用户基数的不断变大,安全性也经历着巨大的挑战 安卓逆向的未来将会迎来巨大的利好。
怎样反编译 Android APK? 我们下载到的 App 安装包是 Apk 文件(Android Application Package) 。通过 Apk 文件,我们也可以得到这个应用的代码和资源文件,对应用进行修改。 那么我们如何获取这些文件呢?这就需要 Android 反编译技术。 01 所需要的软件 Apktool 反编译 xml 文件和 dex 文件,并可以将编译后的项目重新打包成 apk。 官方下载地址: Apktool dex2jar 将 classes.dex 转换为「.jar」文件) 官方下载地址: dex2jar jd-gui 查看「.jar」文件 官方下载地址: jd-gui 02 Apktool 我们可以通过 Apktool 可以将 apk 文件进行反编译,但是直接把 apk 的扩展名改成「.zip」也可以对其进行解压并得到一些资源文件。META-INF 里保存 App 的签名信息 classes.dex .dex 是 Dalvik 虚拟机上的可执行文件,需要使用 dex2jar 将其转换为 jar 文件 AndroidManifest.xml Android 清单文件,向 Android 系统提供应用的必要信息。 assets 存放一些资源文件字体,声音等。 lib 存放第三方库 original 存放未经过反编译的等 AndroidManifest.xml 文件 res 存放资源文件,例如图片,颜色,字符等。 smali smali 里存放的是 java 编译成的 smali 代码,smali 相当于 Android 虚拟机上运行的语言。 直接解压可以得到一些资源文件,但是 AndroidManifest.xml 和其他的 xml 文件都是乱码,通过 Apktool 进行反编译,可以最大限度的还原这些文件的内容。 02 - 1 安装 Apktool Windows : 下载好 script 脚本文件,修改名称「apktool.bat」 下载 apktool,然后修改名称为「apktool.jar」 将「apktool.jar」和「apktool.bat」移动到 windows 目录(一般在 C://windwos 下) 在命令行中输入 $ apktool 如果出现则说明安装成功,若没有出现,则需要把「apktool.jar」、「apktool.bat」的路径添加到系统的环境变量中。 Mac OS: 下载好 script 脚本文件,修改名称「apktool」 下载 apktool,然后修改名称为「apktool.jar」。 把「apktool」、「apktool.jar」移动到 /usr/local/bin目录下 在命令行中 cd 到 /usr/local/bin中然后分别输入下面两条命令 $ chmod a+x d2j_invoke.sh $ chmod a+x d2j-dex2jar.sh 在命令行中输入 $ apktool 出现则安装成功 02 - 2 反编译 Apk cd 到 apk 的目录下 输入 $ apktool d test.apk运行完成后,得到一个包含资源文件和代码的文件:注意: 此时 dex 文件直接反编译成了 smali 文件,而我们需要的是 .dex 文件。 此时再运行: $ apktool d -s -f test.apk -d 反编译 apk 文件 -s 不反编译 dex 文件,而是将其保留 -f 如果目标文件夹存在,则删除后重新反编译 此时得到这样的文件夹:02 - 3 打包、签名新的 Apk 为了演示如何将修改过后的 Apk 文件重新打包签名,以一个简单的 Demo:把 Demo 的背景换了之后,进行打包、签名。 这是初始应用程序的运行效果:使用 Apktool 反编译打开生成的目录进行修改 修改 bg.jpg 为另一张准备好的图片(注意前后命名一致)。重新打包 $ apktool b b_test -o newtest.apk -b 是指 build b_test 是刚才反编译出的文件所在的目录 -o 用于指定新的文件名称,这里指定为「newtest.apk」得到新的 apk 文件注意: 此时的 apk 文件是不能安装的,还需要对其进行签名。 对新的 Apk 进行签名: $ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore testjks -storepass password newtest.apk aliasName 签名文件是我自己生成的,没有办法使用 Apk 原来的签名进行签名。现在将 Apk 安装一下试试看:可以看到,背景资源已经成功替换成我们设置的第二张图片了。 03 dex2jar 下载、解压好 dex2jar 将上一步得到的 classes.dex 文件(有时候还有 classes2.dex,说明方法数过多,把它当成 classes.dex 处理就好了)复制到 dex2jar 解压好的目录中。 在命令行中运行: $ sh d2j-dex2jar.sh classes.dex 如果提示: d2j-dex2jar.sh: line 36: ./d2j_invoke.sh: Permission denied 执行 $ sudo chmod +x d2j_invoke.sh 后再次执行 $ sh d2j-dex2jar.sh classes.dex运行成功,在当前目录下生成了 classes-dex2jar.jar 文件。 04 jd-gui 安装好 jd-gui 之后,用其将 classes-dex2jar.jar 打开,就可以看到反编译出来的 java 代码了!这里的代码没有经过混淆,所以命名容易识别,如果是从应用市场下载下来的 apk 文件,反编译出来的代码大部分是混淆过后的代码。 出于对开发者的尊重和为了保持应用的稳定,希望大家不要随意修改别人的应用程序,请仅从技术层面上妥善利用这一技术!
Android APP的破解技术有哪些?如何防止反编译? 现在最流行的App破解技术大多是基于一定相关技术的基础:如一定阅读Java代码的能力、有一些Android基础、会使用eclipse的一些Android调试的相关工具以及了解一些smali的语法规范和字段的自定范围,再利用现有的各种工具:如APKtool、dex2jar、jd-gui以及签名工具。有了这些前基础和工具,就可以破解很多没有加反编译保护措施的App。 安卓App安全包含很多内容,其中包括混淆代码、整体Dex加固、拆分Dex加固、虚拟机加固等方面。事实上,这些内容也是国内近几年Android App安全保护的一种主要趋势。 一、混淆代码 Java代码是非常容易反编译的,作为一种跨平台的、解释型语言,Java 源代码被编译成中间“字节码”存储于class文件中。由于跨平台的需要,这些字节码带有许多的语义信息,很容易被反编译成Java源代码。为了很好地保护Java源代码,开发者往往会对编译好的class文件进行混淆处理。 混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。ProGuard就是一个混淆代码的开源项目,能够对字节码进行混淆、缩减体积、优化等处理。 Proguard处理流程图如下所示,包含压缩、优化、混淆、预检四个主要环节压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute); 优化(Optimize):对字节码进行优化,移除无用的指令。优化代码,非入口节点类会加上private/static/final,没有用到的参数会被删除,一些方法可能会变成内联代码; 混淆(Obfuscate):使用a、b、c、d这样简短而无意义的名称,对类、字段和方法进行重命名; 预检(Preveirfy):在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。 二、整体Dex加固 为了加强Android保护强度,随着安全技术的发展,又出现了新型的“加固技术”。DEX加固是对DEX文件进行加壳防护,防止被静态反编译工具破解而泄露源码,最刚开始出现的是整体加固技术方案。整体加固技术的原理如上所示,包括替换application/classes.dex、解密/动态加载原classes.dex、调用原application相关方法、将原application对象/名称设置到系统内部相关变量四大环节。其中最为关键的一步就是解密/动态加载原classes.dex,通过加密编译好的最终dex源码文件,然后在一个新项目中用新项目的application启动来解密原项目代码并加载到内存中,再把当前进程替换为解密后的代码,能够很好地隐藏源码并防止直接性的反编译。 三、拆分Dex加固 随着业务规模发展到一定程度,不断地加入新功能、添加新的类库,代码在急剧膨胀的同时,相应的apk包的大小也急剧增加,那么简单的整体加固方案就不能很好地满足安全需求,在整体加固方案之外又出现了拆分加固的技术方案。但是如上所示,dex文件在加固时,针对中间缺失的一部分数据会以解密后的数据来替换,有的时候这种拆分替换也会导致数据不准确。那么到底应该拆分什么样的数据呢?就需要了解一下dex文件的数据结构。 Dex文件结构极为复杂,以下图示选取了其中较为重要的内容。事实上,dex文件是一个以class为核心组装起来的文件,其中最重要的是classdata和classcode两部分,有其特定的接口和指令数据,选取这两部分来拆分的话,即使拆分出来也不会泄露class数据和字节码数据,反编译出来也不完整,安全性较高。四、虚拟机加固 虚拟机加固也属于dex拆分加固的一种,它是对字节做了一些变化处理。如下所示,这是一个正常安卓系统中的代码,在其中进行了虚拟机加固操作:以add-int v0, v1, v2、sub-int v0, v1, v2、mul-int v0, v1, v2这三条指令进行替换,然后进行加固编译,这样子操作后,即使把替换后的数据恢复了,也不会以add-int v0, v1, v2、sub-int v0, v1, v2、mul-int v0, v1, v2这三条指令进行替换,然后进行加固编译,这样子操作后,即使把替换后的数据恢复了,也不会变形成为之前的字节码,安全系数较高。
疫情影响下计算机专业毕业就业难吗? 在这个疫情下很多行业逐渐衰落甚至一蹶不振爬不起来,但是有倒下的就有爬起来的,那就是“网络安全”,加上现在国家之间的矛盾,网络安全是一个很大的机会,在国家政策的扶持下网络安全更是迎来了一大片利好。 所以像电子信息和软件工程都可以向网络安全方向发展,国家的扶持、人口缺口大、薪资高、靠能力说话。 网络安全目前的流行并不是心血来潮,或短期趋势,如网络工程师、ios/ anroid开发-样迅速饱合,目前网络安全已加入国家安全法,国家政策加持及强大的安全企业生态圈将使网络安全人才在接下来10年依然供不应求。 现代人的生活与网络息息相关,个人、企业信息的安全显示尤为重要,2018年报 告的信息安全攻击比去年有所增加,- -年报告安全攻击次数几千万次,应对网络安全挑战,已越来越被重视。目前国内在网络安全领域还处于发展阶段,对信息安全方面人才缺口很大,而随着未来网络的不断发展,信息安全也显得越来越重要。 在你迷茫不知道做什么工作的时候,“网络安全”一个非常不错的选择。正所谓选择大于努力,选对一个行业可以让你少走很多弯路。
作为过来人,学习逆向工程有些话要嘱咐晚辈 如题,逆向工程最近在学习,希望能收到一些建议 以下是原题主描述 我一直觉得开发外挂很牛逼的样子,听说这是逆向工程,想学学,不知怎么入门 首先你是想做那方面的外挂,pc的就学习pc逆向,移动端就学安卓逆向,我从安卓逆向方面说说自己的观点。 游戏外挂是在安卓逆向基础上实现的,想要实现游戏逆向,就得先学会安卓逆向这一套。 以前在培训机构做过工作,基于大部分学员学习安卓逆向的情况来看主要有一下几个方面 1.学习逆向要有一定的编程基础,当然也不是说要很精通代码这种,只要能看懂基本的代码就可以了,要学习的编程语言有Java、c、c++,在安卓端游戏很多都是Java开发的,所以Java是安卓逆向前期必学的基础,基础打不好会后面是很难走的。编程学好了在后面ARM汇编的时候也会有很大优势。 2.会Android正向开发,逆向开发是在正向开发的基础上来实现的,所以正向开发也是必学知识点之一,和Java一样只要能看懂就可以了,不要求精通,但是必须要能看懂和写,这是最基本的。 3.对工具的熟悉使用,如前期的环境配置sdk、ndk等等,后期的抓包工具fd和查尔斯等等,都是至关重要的,如有需要安卓逆向工具包,可以私我有全套的免费赠送给大家。 4.APK保护策略、xposed都是一定要学要会的知识点,不然无法进入后面的加解密环节和协议加解密,解不开加密环节,就进入不了下一步,知识点都是环环相扣的, 5.最后就是厂商及安卓开发APK保护策略、游戏反调试与反-反调试、hook框架,自己找一些游戏来进行实战演练。才知道直接学习到什么阶段了。 在这里我只是大致说了一些,还有很多说的不够全面,如果想要一个全面的学习路线和课程,大家可以找到我能提供的都会提供给大家。 最后声明一点我们学习逆向外挂技术,目的是更多的去除各种外挂,而不是用来从事灰黑色产业,谋取利益,这是被法律制裁的,希望大家不要破坏游戏规则,好好利用自己的技能。
面试逆向安全工程师时会提问什么问题? 安卓逆向工程师在面试这个岗位的时候,问的问题大概是在什么范围呢
做软件逆向有前途吗? 有,而且很大。 论一个行业有没有前途,我这里引用一下百度知道的回答。可以从以下三方面来判断一个行业是否有发展前景: 一是行业所处阶段,是启蒙阶段、起步阶段、快速增长阶段、平缓增长阶段还是饱和、下滑阶段,这方面需要找一些行业数据来分析或佐证。 二是行业对应的市场总体规模有多大,在没有数据支撑的情况下,很多时候需要靠经验或直觉去判断了,最终产品是面向广大民众的,还是面向企业的,或是只面向特殊的用户的。看是做大池子里的小鱼,还是小池子里面的大鱼。 三是行业格局,就是说现在这个市场上的玩家是怎么样的,相对公平地可以竞争,还是资源垄断型。如果目前行业龙头占据了绝大部分市场且有护城河,小的新进企业可能已经没有太多机会。 让我们一点一点来剖析。 1.行业所处阶段 现在逆向正处于行业的风口浪尖上,需求量巨大。写逆向能干什么?写外挂、破解软件、破解数据等等。 学了逆向,能成为软件安全工程师、软件优化工程师,还有“无业游民”。 让我们来看一看这些行业的薪资。可以看到,光是网络测试初级工程师就平均有50000元/年,这和平均工资相比,一定是普遍更高 的;如果你的技术再厉害一些,转高级的,你的薪资就变成了这个:甚至——你还可以自己开家公司,卖自己的产品,那利润多少就要看你的能力了。我们都知道——薪资是和需求成正比的。足以看得出,逆向正处于快速增长阶段,需求还是比较大的。 2.市场总体规模 可以说,逆向的基础就是正向。自软件编程出现以来,逆向就登上了历史舞台。可以看得到,我们正在逐渐步入一个信息化的时代,我们愈来愈发离不开网络,愈来愈离不开手机、电脑等产品,而这些产品里,逆向的声影无时不在。因为逆向的市场,就是软件市场,而软件市场的广袤无垠,就不用我说了吧,人们是可以切身体会到的。 3.行业格局 逆向并非商品。逆向是无法垄断的。可以说,逆向没有一个总体的行业格局。 比如说,你想靠逆向打进通讯业,除非腾讯搞出什么意外来,否则这是几乎不可能的。因为通讯业的特殊性质,已经被腾讯的QQ、微信等占据了,用户粘性极大;相比之下,游戏却并非如此,游戏市场有很多不确定的因素。可能一款游戏火了几个月,大多数玩家都玩腻了,于是纷纷退群;亦或是同一个市场,一款游戏被外挂所馋食,那片市场便空缺了出来,便可以通过逆向打入这片市场 综上所述,做软件逆向真的很有前途。
做软件逆向有前途吗? 有,而且很大。 论一个行业有没有前途,我这里引用一下百度知道的回答。可以从以下三方面来判断一个行业是否有发展前景: 一是行业所处阶段,是启蒙阶段、起步阶段、快速增长阶段、平缓增长阶段还是饱和、下滑阶段,这方面需要找一些行业数据来分析或佐证。 二是行业对应的市场总体规模有多大,在没有数据支撑的情况下,很多时候需要靠经验或直觉去判断了,最终产品是面向广大民众的,还是面向企业的,或是只面向特殊的用户的。看是做大池子里的小鱼,还是小池子里面的大鱼。 三是行业格局,就是说现在这个市场上的玩家是怎么样的,相对公平地可以竞争,还是资源垄断型。如果目前行业龙头占据了绝大部分市场且有护城河,小的新进企业可能已经没有太多机会。 让我们一点一点来剖析。 1.行业所处阶段 现在逆向正处于行业的风口浪尖上,需求量巨大。写逆向能干什么?写外挂、破解软件、破解数据等等。 学了逆向,能成为软件安全工程师、软件优化工程师,还有“无业游民”。 让我们来看一看这些行业的薪资。可以看到,光是网络测试初级工程师就平均有50000元/年,这和平均工资相比,一定是普遍更高 的;如果你的技术再厉害一些,转高级的,你的薪资就变成了这个:甚至——你还可以自己开家公司,卖自己的产品,那利润多少就要看你的能力了。我们都知道——薪资是和需求成正比的。足以看得出,逆向正处于快速增长阶段,需求还是比较大的。 2.市场总体规模 可以说,逆向的基础就是正向。自软件编程出现以来,逆向就登上了历史舞台。可以看得到,我们正在逐渐步入一个信息化的时代,我们愈来愈发离不开网络,愈来愈离不开手机、电脑等产品,而这些产品里,逆向的声影无时不在。因为逆向的市场,就是软件市场,而软件市场的广袤无垠,就不用我说了吧,人们是可以切身体会到的。 3.行业格局 逆向并非商品。逆向是无法垄断的。可以说,逆向没有一个总体的行业格局。 比如说,你想靠逆向打进通讯业,除非腾讯搞出什么意外来,否则这是几乎不可能的。因为通讯业的特殊性质,已经被腾讯的QQ、微信等占据了,用户粘性极大;相比之下,游戏却并非如此,游戏市场有很多不确定的因素。可能一款游戏火了几个月,大多数玩家都玩腻了,于是纷纷退群;亦或是同一个市场,一款游戏被外挂所馋食,那片市场便空缺了出来,便可以通过逆向打入这片市场 综上所述,做软件逆向真的很有前途。
安卓逆向吧吧主竞选:NO.0001号候选人
想学好软件逆向有什么好书可推荐? 书籍: 《Intel开发者参考手册》---没有比这个更权威的资料了,但是是英文的(第三卷有翻译版),而且很晦涩,读起来鸭梨山大,可以找一些教程结合着看。 《Intel 80386保护模式编程》---保护模式编程,必备内功。 《加密解密》---看雪论坛出的,不多说了。 《黑客调试技术揭秘》 《黑客反汇编揭秘》---俄罗斯大神的著作,更加不用多说了,“俄罗斯”这三个字已经足以说明一切了。 《逆向工程揭秘》 《IDA pro权威指南》 《Windows PE权威指南》---学习PE文件结构的好书。 《C++反汇编与逆向分析技术揭秘》 《Windows核心编程》 《天书夜读-从汇编语言到Windows内核编程》 《windows API编程》 《Android软件安全与逆向分析》---智能手机这么火,必须得与时俱进。 《IOS应用逆向工程:分析与实践》---智能手机这么火,必须得与时俱进。
安卓逆向技术能帮助我们做些什么呢? “安卓逆向”不是一个新名词,它伴随着安卓开发而生,但是一直以来,仅限于技术圈内流行,对于非技术圈人士,往往把“APP破解”和“安卓逆向”划等号。这是写给非技术圈人士看的,在于普及安卓逆向的概念及其应用场景。 安卓逆向是什么? 目前百度知道都没有收录安卓逆向这个词条,大部分能搜索到的资料都是技术人员写的偏技术类的文章,往往充斥着代码和各类工具集合,非技术人员一看就比较懵逼。 简单地来说,安卓逆向是对已经打包好的APP进行反编译、源码分析了解APP实现逻辑的一门技术。我们可以把安卓安装时用到的APK文件看作一个加密后的压缩包,逆向就是要最大程序地还原出APK打包之前的源码。 逆向需要用到解密、反编译、解压缩等技术,想要100%还原APK的源码几乎是不可能的,所以在实际进行逆向分析的时候,一般都是根据想实现的目的,分析出APK的部分源码和实现逻辑,然后对这一部分源码进行修改后与原始的APK打包在一起,这样就获得了一个实现自己特定目的的APP。 安卓逆向到底能做什么? APP自动化执行程序脚本 比如有这么一个场景:某APP在某天某一时刻将推广一个领代金券的活动,只要登录账号,进入领取页面即可领取一张面额100元的无门槛代金券。很显然,这是一个可以撸羊毛的活动,如果我收集了100个账号,在那天利用某些手段确保每个账号抢到一张代金券,那我就能抢到100*100=10000元的代金券,再利用网络把这些券打7折卖出去,就能赚个7000块,是不是很爽?!通过安卓逆向分析,我就能把登录、领券的动作做成一个自动化执行的插件,我先把所有账号和密码保存起来备用,到了领券的开放时间,立即自动登录、领券,一个账号领券完,自动切换登录另一个账号,一气呵成就把所有账号的券都领到手。这就是安卓逆向的用途之一,可以自动化批量执行APP的一系列动作。类似地,如果想实现批量登录账号、点赞、评论,同样也是可以的。 修改APP的功能 不知道大家有没有遇到过,有些APP经常提示要更新,有些必须强制更新才能使用,可我就是不想更新,这时候也可以用逆向技术来实现修改APP的某些功能。通过逆向分析,找到触发更新的代码,然后把它屏蔽掉,这样打开APP后就再也不会提示更新了。
渗透与逆向哪个发展会好点? 吃的了几年打基础没产出的苦,耐得住寂寞,就做二进制 做渗透其实也挺好的,我就是Web转二进制,之前主要做代码审计 不做Web是因为不想给人做牛做马,毕竟做渗透的你再这么厉害也要做业务,做二进制漏洞这一块涉 及业务会非常少,而且也是你自己的能力(职责)兴趣所在,这时候他业务也无所谓了 工资来说二进制的工资绝对高,相对来说学习成本也会高,做渗透不需要那么久就可以拿到一个相对 高一些的薪资其实也不错
最高效的学习方法——逆向学习法 如何更加快速、高效地投入IT学习中去呢
在网络安全中,逆向工程重要吗? 正在学习网络安全的相关知识,有时会在查找资料的过程中,看到大牛对于一些安全事件的各种跟踪分析与逆向分析,我想问问各位前辈,网络安全需要花时间去了解学习一下逆向工程的知识吗?要是需要学的话,需要了解到什么程度呢?
Android逆向工程、信息安全方面的工作前景如何? 就目前而言:安卓逆向的前景是非常不错的,现在移动端市场越来越火热,而且我坚信移动端是一个经久不衰的职业。 你想一想现在手机是不是人手一个,没有手机相当于失去了左膀右臂,生活离不开手机,工作离不开手机,可以说是一切都在手机里面。 由此可见安卓在未来是一个什么状态。安卓越火热,app就会越来越多, 在之前被爆出app窃取个人隐私,强行定位,拉取通讯录里面好友信息等各种霸道条款,还有很多病毒是我们不知道的,所以app安全也将面临巨大的市场,而安卓逆向就能解决app安全的问题,逆向app 一攻一防才能知道问题出来哪里,用什么办法解决。 所以安卓逆向前景只会越来越大,技术点也不是很难,不需要精通编程,只需要看得懂基本的代码就可以了,但是安卓逆向是一个杂学,要学的技能很多,但是都不需要很精通,一个工具只要你会用就可以了。 个人发展,你可以到安全公司就业,也可以自己做项目,像我现在任职的公司合作的公司有“奇安信、安天移动安全公司”等等,里面都有我认识的学员。 就业:安卓逆向现在是一个小众职业,但是学好了就业是完全没有问题的,就业基本都是在一线城市,如果你有认识的人,是完全可以内推的,现在也有很多都是内推。 薪资:薪资大概范围在10k-20k之间,就以目前的学员来讲,来学习的学员有完全零基础的,有带基础的,就零基础的出去找工作没试用期最低也是6k,转正12k,这还是最低的,学好了出去基本都是10k起步的,薪资这个东西很大程度取决于你的能力,能力好工资自然高,在it行业不是有句话叫“靠能力吃饭”, 最后声明一切的行为都要在法律范围之内,不要从事灰黑产业。
学了逆向工程,能找哪些公司的什么岗位? 可以从下面这些公司入手, 通信行业通信行业: 中国移动、联通、电信、 铁通等铁路航空行业铁路航空行业: 中国航空、高铁、铁路部门等 金融行业: 上海银监局,东亚银行,宁波银行,兰州银行,法国兴业银行,中国工商银行数据中心,澳新银行(中国)北京分行,成都银行,广西北部湾银行,河北省农村信用社联合社,中国邮政储蓄银行,银监会牡丹江分局,徽商银行总行,中国太平洋保险(集团)股份有限公司,新光海航人寿保险有限责任公司,新光海航人寿保险有限责任公司,海尔人寿保险有限公司,华泰财产保险有限公司,东京海上日动火灾保险(中国) 有限公司,申银万国证券,光大证券; 电力行业: 国网电力科学研究院,浙江省电力,上海电气, 安徽电力,云南云电同方科技有限公司,上海电力科学研究院等 互联网: 英特尔公司Intel (供应商) ,思科中国Cisco,联想集团,百度在线网络技术(北京)有限公司,支付宝(中国)网络技术有限公司,杭州华三通信技术有限公司,网神信息技术(北京) 股份有限公司,上海启明软件股份有限公司,北京江南博仁科技有限公司,上海宝信软件 股份有限公司,上海信天通信有限公司,上讯信息技术有限公司, 上海中科网威信息有限公司, 上海南洋万邦软件 技术有限公司,上海虹信信息科技有限公司,上海鹏越惊虹信息技术发 展有限公司,山西晋缘网络技术有限公司,欧特克(上海)信息技术有限公司,爱渠西来信息技术(上海) 有限公司,北京鼎信诺科技有限公司,上海众人网络安全技术有限公司,上海班利软件 技术有限公司,绿盟上海分公司,苏州南洋软件科技有限公司,广州瑞宝计算机系统有限公司等; 其他行业: 创维得志控股有限公司,天津天士力集团有限公司,安利(中国 集团,宝钢集团有限公司,上海江森自控有限公司,上海汽车集团股份有限公司,上海大众汽车有限公司, 丰田汽车金融(中国)有限公司等;除上面之外,还有腾讯、网易、百度、阿里、淘宝、美团、抖音、拼多多、新浪等公司都需要网络安全人才来支撑关键业务安全稳定运行。
安卓逆向分析,为什么要学习smali,直接反编译成java语言不行? 学习Smali有一下几点好处: 1、修改Smali代码 2、调试Smali代码 3、增加** 很多人都停留在静态分析阶段,也就是说只会用JEB啊,AK之类的工具瞎搞搞,实际上调试也是逆 向中很重要的一部分,我一般用IDEA+Smali调试,非常方便,吾爱有很多资料。总之,我没有听 说过谁能用反编译后算出来的源码进行调试的。 我说一下修改代码吧,这个也必须基于Smali,想破解游戏内购就必须会这玩意,我也没有听说过谁 改改Java代码就修改了游戏逻辑~ 另外,Smali汇编其实一门很简单的汇编,比起CPU的原生汇编来说简单太多了,只要有自信,几 个小时入门是没有问题的!
如何深入系统的学习android逆向分析? 有几年的android应用层开发经验,其他方面的基础很差。 怎么深入学习呢?
选择报班,如何避坑? 现在各种各样的培训培训班多不胜数,如何选择一个好的啊,避免踩坑。
首页
1
2
3
4
下一页