自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 【dawn·算法】最低加油次数(C++)

LeetCode 871.最低加油次数贪心算法、最大堆

2022-07-02 19:10:49 541 1

原创 【dawn·算法】颜色分类问题

LeetCode *75 颜色分类数组整理

2022-01-12 23:15:07 239

原创 【dawn·数据结构】最优结点问题

简要说明:(1) 题目来源:网络(华为2021-09-08秋招题)(2) 代码仅供参考,尚可优化。如有改进空间,欢迎评论分享。目录题目简介思路分析代码讨论:建树题目简介二叉树的最优结点,指移除以该结点为根结点的完整子树时,这棵子树与剩余的树各自的所有结点之和的差值的绝对值最大。如果一棵二叉树同时有多个满足这一条件的结点,认为其最优结点是序号最小的那一个。给定一棵二叉树,每个结点分别有其编号和值,其值可能是一个负数。找出其最优结点。输入样例:44 9 -7 -80 10 31.

2021-09-18 20:53:05 220

原创 【PoRE】Lab2: Android Programming

回到目录内容总结先说些题外话,如各位所见,这是PoRE Labs系列最后一篇更新的博客,虽然是第二个Lab。究其原因,因为它难度不低,哪怕是这会我也不敢保证我写的这些学术垃圾——可能都算不上学术垃圾——这些垃圾代码是否完全正确。这个Lab本身难度也很大,尤其是对于绝大多数同学来说,本就是初学Java,然后三节课又速成Android Programming,网上的教程虽多,但平心而论质量参差不齐。关于这个Lab,其实也有学姐写过,这里我的博客仅供大家参考,不保证代码完全正确。那么回到这节课的内容,来总

2021-07-07 22:24:02 719 2

原创 【PoRE】Lab10: ROP

回到目录内容总结划重点前的最后一次课了!这节课主要讲的是一些二进制漏洞,Lab也是设计了一个知名的攻击方法:ROP。之前CS:APP的Attack Lab,实际上已经有涉及到ROP的一些内容了,所以这次反倒是有些“重复”的意思……还是先来看看课程的重点内容。漏洞(Bug)、脆弱(Vulnerability)、利用(Exploit)的定义及区别。这些课件写得很清楚了。常见的二进制漏洞:缓冲区溢出、整型溢出、格式化字符串、UAF(Use After Free)等等。能够了解一些可用的防止漏洞出现的手

2021-07-07 20:50:49 285

原创 【PoRE】Lab9: Debugging

回到目录内容总结继之前的动态插桩(Dynamic Instrumentation)之后,这节课又介绍了一个很BUG级别的武器——调试(Debugging)。其实在之前CS:APP的Lab中就已经有涉及过调试(BombLab等)了,当时使用的是GDB,那么这次使用的是IDA。调试,可以认为是一种动态的逆向手段,通过设置断点(Breakpoint)等方法动态地查看程序或代码的运行情况。  关于动态插桩,Lab中并没有涉及,课件也主要围绕动态插桩的原理,以及两个Android插桩工具Xposed、Fr

2021-07-07 20:07:55 303

原创 【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 368 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 398 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 328 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 464

原创 【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 318

原创 【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 244

原创 【PoRE】Lab1: Java Programming

回到目录内容总结第一节课的Lab0实质上是关于git仓库的建立和教程,这个就不再赘述了。Lab1是致力于Java编程的。这个思路也很正常:要学会逆向别人的代码,那就需要读懂它们,要能够读懂它们最直接的方法就是我也能写出它们。Java Programming的这个实验是为了之后Android Programming打下基础。因为大部分选上这门课的同学都有C++的基础,至少对面向对象的理念不会陌生。因此这里简单地概述一些有关于Java的语法特征。如果您想要系统地学习Java,可以在网上找到数不尽的资源

2021-07-01 22:05:46 355

原创 【PoRE】Lab记录·目录

写在前面这个文档涉及的课程是为复旦大学本科生开设的专业基础课程《逆向工程原理》(PoRE, principle of reverse engineering)的大部分lab的解题参考。出于对助教们架构PoRE课程资源的尊重,我并不会公开分享所有课程的资源,包括但不限于助教提供的资源、课程站点提供的帮助和指导等等。如果您没有修读本课程,或者手头没有lab的任何资源,请勿找我索取。出于对课程评分的考量,我并没有记录有关于3个PJ的所有解题参考。由于张老师也说了,这门课程也是在不断变化和调整之中。也许当您

2021-07-01 20:43:03 768

原创 【dawn·数据结构·笔记】二叉树的右视图(C++)

简要说明:(1)题目来源:课程(上机考题)。(2)由于作者水平限制和时间限制,代码本身可能仍有一些瑕疵,仍有改进的空间。也欢迎大家一起来讨论。——一个大二刚接触《数据结构》课程的菜鸡留目录题目简介思路分析代码部分讨论1:序列建树问题讨论2:三视图补充部分题目简介给定一颗二叉树的前序遍历和中序遍历序列,先重建这棵树1,然后想象自己站在其右侧,按照从顶部到底部的顺序,返回右侧能看到的结点值。例如对于下图的树,它的右视图的序列便是1 3 6。输入格式有如下要求:第一行是一个整数n,表.

2020-12-24 20:44:57 493 1

原创 【dawn·数据结构】逃脱房间(C++)

简要说明:(1)题目来源:课程(上机考题)。(2)由于作者水平限制和时间限制,代码本身可能仍有一些瑕疵,仍有改进的空间。也欢迎大家一起来讨论。——一个大二刚接触《数据结构》课程的菜鸡留目录题目简介思路分析代码部分改进空间补充部分题目简介你处在一个由M×N的网格组成的房间中,每个格子包含一个正整数x。行编号为1, 2, …, M,列编号为1, 2, …, N,记行编号为i、列编号为j的格子为(i,j)。房间从左上角的即(1,1)开始,从右下角(M,N)退出。如果你在值为x的格子中,则可以跳转.

2020-12-22 14:53:57 723 1

原创 【dawn·数据结构】迷宫问题(C++)

简要说明:(1)题目来源:课程。(2)由于作者水平限制和时间限制,代码本身可能仍有一些瑕疵,仍有改进的空间。也欢迎大家一起来讨论。——一个大二刚接触《数据结构》课程的菜鸡留题目简介给定一个m×n(3≤ m,n <1001)迷宫,其中1表示墙壁,0表示通路。你可以使用一个二维数组maze[m][n]来表示这个迷宫,其中起点和终点固定在maze[1][0]和maze[m-2][n-1]的位置。你可以有8种前进方向,即分别是正北、正南、正西、正东、西北、西南、东北、东南(假设行坐标自大到小为.

2020-12-11 00:48:07 777 5

原创 【dawn·数据结构】string转Fibonacci序列问题(C++)

简要说明:(1)题目来源LeetCode。链接:https://leetcode-cn.com/problems/split-array-into-fibonacci-sequence/(2)由于作者水平限制和时间限制,代码本身可能仍有一些瑕疵,仍有改进的空间。也欢迎大家一起来讨论。——一个大二刚接触《数据结构》课程的菜鸡留题目简介给定一个字符串S,进行若干次分隔,使结果为Fibonacci序列。假设输入字符串S=“123456579”,可以将它分割成一种Fibonacci序列[123, .

2020-12-08 19:28:27 97

原创 【dawn·数据结构】解数独问题(C++)

简要说明:(1)题目来源网络(题目要求和输入样例参考LeetCode相同题目)链接:https://leetcode-cn.com/problems/sudoku-solver/(2)由于作者水平限制和时间限制,代码本身可能仍有一些瑕疵,仍有改进的空间。也欢迎大家一起来讨论。——一个大二刚接触《数据结构》课程的菜鸡留题目简介编写一个程序,给定部分格子及数字,通过填充空格来完成数独。对于数独有如下要求:1、数字1-9在每一行只出现一次。2、数字1-9在每一列只出现一次。3、数字1-9在.

2020-12-08 18:34:39 770

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除