自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android selinux策略配置

功能需求描述在android的keystore服务中获取调用者的包名。代码实现:#include <binder/IPCThreadState.h>//...... pid_t pid = android::IPCThreadState::self()->getCallingPid(); ALOGI("calling pid: %d", pid); char path[64] = { 0 }; sprintf(path, "/proc/%d/cmdli

2021-06-28 15:19:51 977

原创 在Android.bp文件中如何引用编译好的so库

在Android.bp文件中如何引用编译好的so库以Android系统的keystore服务代码的Android.bp文件为例。要修改keystore服务的源码,在源码中引用第三方so库。假设so库命名为:libxxxx.so拷贝so库到keystore源码目录下path_to_keystore$ ls -R lib lib64lib:libkeystoreap.solib64:libkeystoreap.so在Android.bp文件中声明cc_prebuilt_library_s

2021-06-18 16:46:45 3728 1

原创 Gerrit

开发、提交、push、入库流程:repo init -u ssh://gerrit帐号@[ip:port/platform/manifest -b 分支名repo sync -c -f --no-tags -j1git commitgit push origin HEAD:refs/for/分支名push后,gerrit会触发代码静态检查(checkstyle等),根据检查结果做代码修改,修改后使用commit amend重新提交。在gerrit web中选择Reviewers,进行Code R

2021-04-15 21:58:59 2798

原创 Kanzi for Android Demo

111

2021-04-01 10:38:32 1122 1

原创 开发系统内置App

开发系统内置App常规App通常使用gradle编译,但系统内置App通常使用Android.mk来配置编译规则。因此考虑使用AS来编写代码,使用命令行make、mmm等命令来编译apk。使用AS导入Android代码分两种情况:导入全部Android代码;只导入特定App代码;导入全部Android代码步骤lunch命令后,执行如下命令:$ mmm development/tools/idegen/ $ development/tools/idegen/idegen.sh

2021-03-31 21:58:32 1302

原创 安卓系统代码下载编译

下载代码及编译步骤$ mkdir ~/xxx$ cd ~/xxx$ repo init -u ssh://gerrit帐号@[ip:port/platform/manifest -b 分支名$ repo sync -c -f --no-tags -j1#有的仓库下载下来,需要cd到源码目录,比如:$ cd LINUX/android/ $ build/envsetup.sh $ lunch #lunch命令会输出该版本系统支持的多种设备以及对应的发布版本,根据情况选择,比如:$ 4

2021-03-31 21:36:53 86

翻译 树莓派-时区设置

命令:pi@raspberry:~ $ sudo raspi-config设置完成后,使用date命令查看时区设置:pi@raspberrypi:~ $ dateSun 3 May 21:33:10 CST 2020

2020-05-03 21:35:37 589

原创 PyCharm ssh远程树莓派开发

前面几次分享中,都是使用ssh远程到树莓派,然后直接在树莓派中使用vim编辑器写python代码,然后在命令行中使用python3解释器执行代码。如此开发,显然效率会大打折扣,并且也不方便做代码断点调试、单元测试等等。这次分享中,我们就介绍如何使用PyCharm来配置ssh连接,进行远程开发和调试。这里需要PyCharm的Professional版本,Community版本不支持ssh远程开发...

2020-04-02 23:07:16 1571 1

原创 4、树莓派-PWM控制led明暗

python RPi.GPIO库支持使用pwm方式控制GPIO引脚,进而控制与GPIO引脚连接的外设。本次实验使用led灯作为外设,通过PWM脉冲信号控制其亮暗程度的变化。电路连接如下:其中黑色线接树莓派GND,黄色接BCM编码的2号GPIO,GPIO与LED正极间串联个1k左右的电阻(这里用了2个5k的电阻并联,因为没有小电阻了~~~~~)。python代码如下:import RPi...

2020-03-31 23:55:24 2275 1

原创 3、树莓派-温度采集-DS18B20

111

2020-03-17 22:11:03 1337

翻译 二十、ROP实践

在路由器漏洞利用的场景中,一般使用两种常用的利用方法,一种是上次分享中使用的System/Exec方式,一种就是本节中我们要分享的ROP Chain方式。ROP(Returen-Oriented Programming)是把原来已经存在的代码块拼接起来,拼接时使用一个预先准备好的、包含各条指令结束后下一条指令地址的特殊返回栈。一般的程序里都包含着大量的返回指令,如“jr $ra”,他们大都位于函...

2020-03-10 23:12:51 712

翻译 十九、Shellcode应用实践

首先,我们编写一个存在缓冲区溢出漏洞的程序,功能比较简单:从passwd文件中读取密码,如果密码为“adminpwd”即有权限执行系统命令“ls -l”列出当前目录,否则提示密码错误后直接退出。源码vuln_system.c:#include <stdio.h>#include <string.h>#include <sys/stat.h>#inclu...

2020-03-10 23:05:53 419

翻译 十八、常用Shellcode开发

本次我们主要总结和分享了一些常用的Shellcode。我们在前面几次分享中都是围绕着execve系统调用相关的Shellcode展开的。我们可以看到execve可以很方便的在存有栈溢出的路由器中完成远程命令执行。但它并不是唯一常用的Shellcode,在书中作者还介绍了一个简单的reboot Shellcode,主要用于发起对目标路由器的拒绝服务攻击。还有一个比较复杂的,通过联合多个系统调用来获...

2020-03-10 22:52:00 766

翻译 十七、Shellcode编码

在很多的漏洞利用场景中,Shellcode的内容会受到限制,这种限制不仅来自存在漏洞的软件自身,在某些情况下,也来自一些基于特征的IDS(网络入侵检测系统)系统。我们先来看看Shellcode会受到哪些限制。首先,所有的字符串处理函数都会对NULL字节进行限制,通常我们会选择对Shellcode指令进行优化以避免在Shellcode中直接出现NULL字节。其次,在某些处理流程中可能会限制0x0...

2020-03-10 22:39:28 3093

翻译 十六、Shellcode指令优化

在上一篇的分享中,我们编写了一段使用execve系统调用执行/bin/sh命令的Shellcode:#include <stdio.h>// shellcode 指令数据char sc[] = { "\x24\x06\x01\x11" "\x04\xd0\xff\xff" "\x24\x06\x00\x00" "\x27\xbd\xff\xe0" "\x27\xe4\x...

2020-03-10 22:34:12 779

翻译 十五、MIPS ShellCode

狭义上得Shellcode是指,向进程植入的一段用于获取Shell的代码,事实上,如今的Shellcode所具备的功能已经不仅仅包括获取Shell,还包括开启端口、执行命令等。Shellcode通常使用汇编语言编写,最终将其转换成机器可识别的二进制机器码,其内容和长度还会受到很多苛刻的限制,因此开发和调试的难度非常高。Shellcode编写好后,通常在程序的可注入点,将Shellcode注入到...

2020-03-10 22:28:23 755

原创 十四、MIPS汇编指令-子函数

我们回顾一下上次分享中的C代码:#include <stdio.h>#include <string.h>void B() { printf(".....\n");}void A(char *content) { char buf[32]; strcpy(buf, content); printf...

2020-03-10 22:22:03 1361

原创 十三、MIPS汇编指令-main函数

本次的分享,我们将以一段简单的C语言程序为例,使用mips-linux的gcc编译器对其进行编译后,使用ida对编译后的程序进行反汇编,并通过对照C语言代码的方式理解MIPS汇编指令。首先我们来看这段C代码(test.c):#include <stdio.h>#include <string.h>void B() { printf(".....\...

2020-03-07 16:08:07 2816 1

原创 十二、缓冲区溢出漏洞原理

缓冲区溢出漏洞是一种非常普遍且危险的漏洞,在各种操作系统、应用软件中广泛存在,在路由器中也不例外。利用缓冲区溢出攻击,可以造成程序运行失败、系统宕机、更为严重的是,利用缓冲区溢出攻击可以执行非授权指令,进而取得系统特权进行各种非法操作。本次内容主要分享和总结了MIPS程序的栈空间缓冲区溢出原理,并通过代码示例让你更进一步的体会缓冲区溢出漏洞的利用效果。MIPS栈原理这里的缓冲区主要指的是栈,...

2020-03-07 15:55:05 1707

翻译 十一、路由器后门漏洞

在信息安全领域,后门是指绕过安全控制而获取对程序或系统访问权的方法。例如,即使某一款路由器拥有完美的安全防护功能和设置,但是却保留了一条不为人知的秘密通道,如果被攻击者发现,攻击者同样可以轻松进入并获取对路由器的控制权限。这时候,再完美的安全防护都已形同虚设。对于路由器中的存在后门,成因有多种多样,有的是为了方便开发人员管控路由器而保留,有的是发布时遗留的安全漏洞,还有的或许是有人对路由器固件...

2020-03-07 15:47:30 1407

翻译 十、路由器Web漏洞原理

前面的文稿中我们提到过,家用路由器一般都带有Web管理服务,用户可以通过Web管理页面进行路由器的管理和配置。既然存在Web管理服务,那么常见针对Web漏洞的攻击手段(诸如XSS、CSRF)等,同样可以运用在针对路由器的攻击中。XSS第一种常见的漏洞类型是XSS漏洞,英文全称是Cross Site Scripting,即跨站脚本攻击,显然重点词汇是“Script”,在网页代码中,这个脚本一般...

2020-03-07 15:45:32 883

翻译 九、HTTP协议及Python HTTP编程

从家用路由器被披露的漏洞情况来看,大部分的漏洞都存在于路由器中的Web服务器程序,这些漏洞往往是由Web服务器程序没有正确解析攻击者发送的请求数据造成的,而这种请求数据往往采用HTTP协议,所以,对于HTTP这样的基础协议,我们非常有必要对其做深入的学习。学习前,我们首先使用wireshark捕获一下浏览器登录路由器Web管理页面的HTTP协议数据:参考上面这个真实的、完整的HTTP协议数据...

2020-03-07 15:41:56 730

原创 八、IDA动态调试MIPS-Linux程序

在使用IDA对MIPS-Linux程序做动态分析的时候,按照常规的逻辑,我们应该假设MIPS-Linux程序能够以一种等待调试的状态运行着,然后我们就可以使用IDA远程附加调试的方式attach到这个MIPS-Linux进程上,然后通过断点或单步的方式对进程进行动态调试。所以,“如何让路由器中的MIPS-Linux程序能够以一种等待调试的状态运行着”应该是首要解决的问题。然而实际情况却没那么乐观,...

2020-03-06 21:03:21 1742

原创 七、IDA静态分析MIPS-Linux程序环境搭建

注:若访问github或Google较慢,可使用加速器:http://91tianlu.date/aff.php?aff=3468IDA是一款强大的反汇编和动态调试工具,能够辅助研究人员进行静态分析和动态调试。书中通过开源工具将Windows中的IDA工具运行在了Linux系统中。我也多次尝试使用开源工具wine来安装IDA的不同版本,但由于各种原因,导致安装成功率并不高,总是出现各种各样...

2020-03-06 20:40:32 2229 2

原创 六、QEMU+MIPS环境搭建(下)

QEMU System模式的使用上一次我们分享的是QEMU User模式的使用方法,使用User模式的QEMU,确实可以满足大多数的模拟运行场景,但它也确实存在很多硬伤。比如QEMU的User模式并不能完整的模拟mips-linux的内核环境,导致一些应用程序需要严重依赖比如/proc目录下或/sys目录下的内存文件,而这些文件一般都是Linux内核在启动时产生的,甚至有些文件只有在真正的mi...

2020-03-06 19:56:48 5137 3

原创 五、QEMU+MIPS环境搭建(上)

QEMU是一个处理器模拟软件,可以用来在PC中模拟ARM、MIPS等多种架构的软硬件运行环境。QEMU主要有两种模拟模式:User Mode;System Mode。System模式中,它可以在一个主机环境中虚拟不同的虚拟计算机系统,比如可以在Ubuntu系统中虚拟出一个MIPS架构的Debian系统。User模式中,它可以运行一个为其他处理器编写的应用程序,比如可以在X64-Ubun...

2020-03-04 22:22:32 6577 5

原创 四、固件分析利器-binwalk

binwalk是一款强大的固件分析工具,它不仅可以用于提取文件系统,也可以用于协助研究人员对固件进行分析和逆向工程。它的开源代码可以在Github中找到(https://github.com/ReFirmLabs/binwalk),这个Github中也有关于binwalk如何安装的指导步骤(https://github.com/ReFirmLabs/binwalk/blob/master/INS...

2020-03-04 22:17:37 3733 1

原创 三、Linux常用命令

Linux中的命令有很多,为了能够让初学者快速入门,我们这里只介绍几个常用的命令,当我们把Linux用起来以后,遇到陌生的命令我们再即用即学。登录Ubuntu系统后,在桌面的任意位置使用鼠标右键,然后选择“Open Terminal”就可以进入Ubuntu系统的命令行终端输入命令了。每个命令行终端窗口都可以算作一个完整的Linux任务,而每个Linux任务都会默认有一个叫做“工作目录(work...

2020-03-04 22:13:31 238

原创 二、VMWare Ubuntu16.04 虚拟机安装

在书中,作者使用的是VMWare+Ubuntu12.04的环境,而Ubuntu 12.04版本显然已经很老旧了,在实际使用的过程中经常会出现一些软件源不能使用的问题,也会出现一些较新的软件在老旧的Ubuntu12.04版本中不好用的问题,这些问题都为后面的环境搭建工作带来不少的麻烦,所以后来我使用了比较新的Ubuntu16.04和目前最新版本的VMWare Workstation 15.1.0 P...

2020-03-03 22:27:08 238

原创 零、《揭秘家用路由器0day漏洞挖掘技术》领读(上)-开篇词

为天地立心,为生民立命,为往圣继绝学,为万世开太平。本书对家用路由器漏洞分析所涉及的基础知识、工具、原理、实例均进行了详细的讲解。其中包括了Linux命令、MIPS汇编语言、HTTP协议、IDA、Binwalk、QEMU、串口、JTAG等漏洞分析涉及的常见工具,也包括对常见路由器漏洞分类的原理的讲解,如路由器Web漏洞、密码破解漏洞、后门漏洞、缓冲区溢出漏洞,特别是对缓冲区溢出漏洞做了特别...

2020-03-03 21:55:06 648 1

原创 2、树莓派-点亮LED

准备工作

2020-03-03 21:35:30 228

原创 1、树莓派系统烧录

准备树莓派 zero wMicro SD卡Micro SD读卡器电脑(Windows系统)可联网的无线路由器下载Raspbian系统镜像https://www.raspberrypi.org/downloads/raspbian/本次试验使用的是Lite版本。下载烧录软件https://www.balena.io/etcher/烧录软件下载较慢且不稳定,可考虑使用加速器(...

2020-03-01 22:45:55 487

翻译 3、Golang-BDD(Behavior Driven Development)

简单整两句如果你的公司使用敏捷方法来开发,那你一定知道什么的Story Card。一个Story Card的正面会写明一个用户故事,然后开发团队据此进行开发,来满足这个用户故事:其实这个Story Card不仅正面有内容,反面也会写内容,反面一般会写明这个Story应该是怎样被验收的。通常这个验收会使用业务领域的语言来描述,这就避免了工程师和用户方的词汇表述不一致造成的种种问题。当然这种描...

2020-02-28 23:18:27 391

翻译 2、Golang-Benchmark性能测试

简单整两句Benchmark测试通常用于对代码片段的性能测试和对第三方库的性能进行评估测试。Benchmark性能测试用例也是测试代码,所以它应该写在以_test结尾(xxx_test.go)的测试用例代码文件中。形式如下:跟普通的测试用例不一样的地方是,Benchmark性能测试用例函数的开头是以Benchmark开头的,而不Test开头的。参数类型是testing.B,而不是tes...

2020-02-28 22:43:09 414

翻译 1、Golang-单元测试

简单整两句Golang的单元测试编写约束与Go语言的简洁如出一辙,仅仅需要注意两点:测试源码文件以_test结尾:xxx_test.go;测试方法名以Test开头:TestXXX(t *testing.T) {…};没了。。。。。。上代码,自己体会:功能代码:(hello.go)package hellofunc Sum(a int, b int) int { return...

2020-02-27 22:06:50 184

翻译 七、Golang-高效字符串连接

简单整两句字符串连接是一个老生常谈的问题了,但因为它在程序中使用的频次实在是太高了,所以这里再次强调一下。上代码这段代码使用了几种常见的方式做字符串连接操作,分别是fmt.Sprintf、strings.Builder、bytes.Buffer和+=。package concat_stringimport ( "bytes" "fmt" "strconv" "strings"...

2020-02-27 09:16:31 399 1

翻译 四、Golang-高性能map

简单整两句Go语言内置的map数据结构是线程不安全的,如果存在多个线程同时读或写同一个map时,常常会导致难以预料的问题。所以,有很多程序员在使用Go语言内置的map时,会在外面包装一层,即封装一层读写接口,并在接口实现内部引入读锁或写锁,以此来保证多线程安全访问map。在上一篇博客中,我们知道,即使是使用读锁,也会严重降低程序性能。因此针对map的优化,也存在很多方案。sync.map方...

2020-02-26 23:16:48 2932

翻译 三、Golang-别让性能被"锁"住

先整两句很多时候程序的性能问题是由“锁”导致的。这篇博客通过一段测试程序比较不加锁、加锁两段代码的性能差异。上代码package lock_testimport ( "fmt" "sync" "testing")var cache map[string]stringconst NUM_OF_READER int = 40const READ_TIMES = 10000...

2020-02-26 18:28:38 432

翻译 一、Golang性能分析工具

准备工作安装graphvizGo语言的内置工具可以借助graphviz软件将性能分析结果图形化。OS X和Ubuntu可以直接使用brew和apt-get install graphvizWindows用户可以下载zip包,然后将解压后的目录添加Path环境变量中。下载地址:http://www.graphviz.org/download/将$GOPATH/bin目录添加到Path环境...

2020-02-26 08:56:41 1287

翻译 六、Golang Slice(切片)容量与GC开销

翠花,上代码:package gc_friendlyimport "testing"const numOfElems = 100000const times = 1000func BenchmarkAutoGrow(b *testing.B) { for i := 0; i < b.N; i++ { s := []int{} for j := 0; j < n...

2020-02-25 14:22:24 929

空空如也

空空如也

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

TA关注的人

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