![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
逆向工程原理(PoRE)
文章平均质量分 91
Iridescent_fd
一个弱鸡本科在学码农...
展开
-
【PoRE】Lab2: Android Programming
回到目录内容总结先说些题外话,如各位所见,这是PoRE Labs系列最后一篇更新的博客,虽然是第二个Lab。究其原因,因为它难度不低,哪怕是这会我也不敢保证我写的这些学术垃圾——可能都算不上学术垃圾——这些垃圾代码是否完全正确。这个Lab本身难度也很大,尤其是对于绝大多数同学来说,本就是初学Java,然后三节课又速成Android Programming,网上的教程虽多,但平心而论质量参差不齐。关于这个Lab,其实也有学姐写过,这里我的博客仅供大家参考,不保证代码完全正确。那么回到这节课的内容,来总原创 2021-07-07 22:24:02 · 851 阅读 · 2 评论 -
【PoRE】Lab10: ROP
回到目录内容总结划重点前的最后一次课了!这节课主要讲的是一些二进制漏洞,Lab也是设计了一个知名的攻击方法:ROP。之前CS:APP的Attack Lab,实际上已经有涉及到ROP的一些内容了,所以这次反倒是有些“重复”的意思……还是先来看看课程的重点内容。漏洞(Bug)、脆弱(Vulnerability)、利用(Exploit)的定义及区别。这些课件写得很清楚了。常见的二进制漏洞:缓冲区溢出、整型溢出、格式化字符串、UAF(Use After Free)等等。能够了解一些可用的防止漏洞出现的手原创 2021-07-07 20:50:49 · 319 阅读 · 0 评论 -
【PoRE】Lab9: Debugging
回到目录内容总结继之前的动态插桩(Dynamic Instrumentation)之后,这节课又介绍了一个很BUG级别的武器——调试(Debugging)。其实在之前CS:APP的Lab中就已经有涉及过调试(BombLab等)了,当时使用的是GDB,那么这次使用的是IDA。调试,可以认为是一种动态的逆向手段,通过设置断点(Breakpoint)等方法动态地查看程序或代码的运行情况。 关于动态插桩,Lab中并没有涉及,课件也主要围绕动态插桩的原理,以及两个Android插桩工具Xposed、Fr原创 2021-07-07 20:07:55 · 335 阅读 · 0 评论 -
【PoRE】Lab8: Native Code Reverse
回到目录内容总结这次专题主要围绕JNI进行,从而展开了对native方法及native code的介绍。关于ELF文件、GOT&PLT表的介绍,在ICS课程已有涉及,在此略过。 ARM架构(ARM Architecture),作为一种精简指令集机器(RISC, Reduced Instruction Set Computing),相比传统的x86指令,有以下优点:更多的寄存器、存储与读取的指令、固定长度指令、条件执行……由于固定长度的设计,使得运行速度提升。 关于ARM指令集的细节原创 2021-07-05 16:20:55 · 420 阅读 · 1 评论 -
【PoRE】Lab7: Packet Sniffing
回到目录内容总结这一课主要围绕着应用层协议HTTP、传输层协议TCP和UDP展开的,并且介绍了BurpSuite这一工具。大部分内容应该和《计算机网络安全》(名字可能每届会改)课程有所重复。Lab简介与参考这个Lab一共分成两个部分,都会围绕着BurpSuite展开。Task 1.1: Find two secrets in the app Task 1需要我们输入一个用户名和密码。 最开始漫无头绪,先随意输入一个内容后发送,用BurpSuite拦截返回的应答包,发现是一串没有意义原创 2021-07-04 12:57:58 · 503 阅读 · 1 评论 -
【PoRE】Lab6: Deobfuscate Android Apps
回到目录内容总结这个Lab可能是纵观所有Lab中,最无趣的那一个了。不过抛开Lab不谈,这一次课的内容,即反混淆(Deobfuscating),对于实际情况下的逆向还是很重要的。接下去整理一下课件中的重点内容。 常见的、通用的混淆技术包括:布局混淆(Layout Obfuscation)(包括命名混淆等)、数据混淆(Data Obfuscation)、控制混淆(Control Obfuscation)等,以及针对Java的一些语言特性进行的混淆(Java-specific Obfuscatio原创 2021-07-03 19:13:42 · 397 阅读 · 1 评论 -
【PoRE】Lab5: Reversing and Repacking
回到目录内容总结本Lab以及课件的内容在之前对Smali逆向的基础之上,引入了一些更深入的话题,例如对于固定结构的Smali代码的模式匹配的话题等等。之后,介绍了一些反汇编器(Decompiler),例如JEB、jadx等等…… 由于JEB对JDK版本有一些要求,而课程建议的JDK版本中,我安装了不适合JEB的那个版本……【笑哭】于是之后的所有有关Java反汇编器的操作,都以jadx为主要工具。这一次Lab中需要我们进行重打包(Repacking)的操作,这需要使用到apktool。此外原创 2021-07-03 15:58:49 · 500 阅读 · 0 评论 -
【PoRE】Lab4: Smali2Java
回到目录内容总结这个Lab与Lab 3“相反”:Lab 3是根据提供的或自己写的Java代码改写为Smali代码;而本Lab是根据Smali代码重写为Java代码。总的来说,这个Lab更符合期末考试的真实情境。如课件的Reverse Smali中展示的一样,课程内容大致如下:控制流图(CFG, Control Flow Graph),能够清晰地展现出一个函数中的控制流的转换与流程。其中需要注意如循环结构、分支结构、以及错误处理(try-catch)结构的处理。期末考试虽然并不要求画出正确的CF原创 2021-07-03 14:33:39 · 348 阅读 · 0 评论 -
【PoRE】Lab3: Smali Programming
回到目录内容总结这个Lab的核心在于如何写Smali代码,这就需要了解一些Java对应的Smali的语法,在课件里应该比较详细,因此在这里不多重复。Lab需要我们对照Java代码自己写对应的Smali代码,编译成.dex文件后放在虚拟机里运行验证结果。Lab简介与参考Task1: Rabbits Problem 这个问题实际上就是求Fibonacci数列的特定项。其中,f0=1, f0=1,fn+2=fn+1+fn,n∈N。可以使用递归和非递归的方法实现。这里使用非递归的方法实现。//原创 2021-07-01 22:50:10 · 264 阅读 · 0 评论 -
【PoRE】Lab1: Java Programming
回到目录内容总结第一节课的Lab0实质上是关于git仓库的建立和教程,这个就不再赘述了。Lab1是致力于Java编程的。这个思路也很正常:要学会逆向别人的代码,那就需要读懂它们,要能够读懂它们最直接的方法就是我也能写出它们。Java Programming的这个实验是为了之后Android Programming打下基础。因为大部分选上这门课的同学都有C++的基础,至少对面向对象的理念不会陌生。因此这里简单地概述一些有关于Java的语法特征。如果您想要系统地学习Java,可以在网上找到数不尽的资源原创 2021-07-01 22:05:46 · 369 阅读 · 0 评论 -
【PoRE】Lab记录·目录
写在前面这个文档涉及的课程是为复旦大学本科生开设的专业基础课程《逆向工程原理》(PoRE, principle of reverse engineering)的大部分lab的解题参考。出于对助教们架构PoRE课程资源的尊重,我并不会公开分享所有课程的资源,包括但不限于助教提供的资源、课程站点提供的帮助和指导等等。如果您没有修读本课程,或者手头没有lab的任何资源,请勿找我索取。出于对课程评分的考量,我并没有记录有关于3个PJ的所有解题参考。由于张老师也说了,这门课程也是在不断变化和调整之中。也许当您原创 2021-07-01 20:43:03 · 809 阅读 · 0 评论