时间从来不语,却回答了很多问题


post @ 2022-01-22
阅读此文


参考文章:

利用符号执行去除控制流平坦化

修复去除控制流平坦化工具deflat.py

符号执行去除控制流平坦化详细讲解,请参考第一篇文章

python3脚本:

deflat.zip

大概跑十几分钟

阅读此文


apktool安装:Apktool

反编译apk:

1
apktool d /.../...apk

会在apk文件夹下生成包含如下若干文件的项目文件夹:

打包:

1
apktool b ../../dir
阅读此文


21.1.16更新,感谢这位大佬提供的安装包,不用麻烦地安装了:

https://www.cnblogs.com/andy0816/p/15448681.html

链接: https://pan.baidu.com/s/1v3RcCCMlRCT9a01AWk-exA 提取码: r32v

如果mac 10.15上ida64.app无法打开,终端执行下面命令

sudo xattr -rd com.apple.quarantine /Applications/IDA\ Pro\ 7.0/ida64.app

10.15及以后版本苹果取消了MacOS对32程序运行的支持,而IDA Pro for Mac的最后一个Crack版是7.0。虽然7.0的程序本体是64位的,但是当安装软件时,安装程序会调用osx-install程序进行安装,但它是一个32位程序,所以在10.5及以后版本无法正常安装这个版本。接下来详细描述一下安装过程。

阅读此文


题目本身是个自解压程序,解压出来后需要安装 .NET 框架。exeinfo 查出也是 C# 程序:

运行一下,有个decode按钮,点一下出现一串加密字符,猜测内部对flag进行加密操作:

直接拖进dnSpy,顺着main函数找到关键点:

阅读此文


首先使用Homebrew安装nasm

1
brew install nasm

随后创建 hello.asm 文件,写入如下指令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SECTION .data

msg: db "Hello Assembly! ", 0x0a
len: equ $-msg

SECTION .text
global _main

_main:
mov rax, 0x2000004
mov rdi, 1
mov rsi, msg
mov rdx, len
syscall

mov rax, 0x2000001
mov rdi, 0
syscall

这里使用到了 id 为 4 的 syscall 系统调用。

我们前往/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk 1/usr/include/sys/这个目录,找到一个叫syscall.h的文件。这个文件的格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

#ifndef _SYS_SYSCALL_H_
#define _SYS_SYSCALL_H_

#include <sys/appleapiopts.h>
#ifdef __APPLE_API_PRIVATE
#define SYS_syscall 0
#define SYS_exit 1
#define SYS_fork 2
#define SYS_read 3
#define SYS_write 4
#define SYS_open 5
#define SYS_close 6
#define SYS_wait4 7
/* 8 old creat */
#define SYS_link 9
#define SYS_unlink 10
/* 11 old execv */
#define SYS_chdir 12
#define SYS_fchdir 13

// ...
阅读此文


首先我们查看一下信息,32位程序,无壳:

 然后用IDA打开,提示// positive sp value has been detected, the output may be wrong!

出现了栈不平衡的问题,导致ida无法生成伪代码。那为什么会出现这种情况呢?

一般是程序代码有一些干扰代码,让IDA的反汇编分析出现错误。比如用push + n条指令 + retn来实际跳转,而IDA会以为retn是函数要结束,结果它分析后发现调用栈不平衡,因此就提示sp analysis failed.

还有一些比如编译器优化,因为ida是用retn指令来识别函数结束的,如果函数不是以这种方式结束,IDA就会分析为栈不平衡。也就是IDA找不到函数结束的位置。

例如以下代码:

阅读此文


post @ 2021-11-23

东华杯遇到一题安卓逆向,测试机怎么也安装不了。总结一下我遇到的坑。

ADB安装

首先你要下载AndroidSDK,推荐直接用Android Studio自带的,安装过程中会让你选择SDK的安装路径(不要有中文!)

然后AndroidSDK\platform-tools下就有adb,将这个路径放入环境变量就行了。

ADB使用

首先你要打开手机的开发者模式,然后打开USB调试,再连接电脑。输入以下命令查看设备:

1
adb devices
阅读此文


加载shellcode免杀这一问题是渗透过程中不可缺少的部分,以此使得我们的目标机器能够成功上线。此篇博客记录我免杀入门的简单尝试。

CS生成默认shellcode

生成64位shellcode

shellcode加密

阅读此文


post @ 2021-11-22

Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。

Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。另外,Docker也为容器提供更强的业界的隔离兼容。

Docker 利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心名字空间(namespaces),来创建独立的容器(containers)。这可以在单一Linux实体下运作,避免启动一个虚拟机造成的额外负担。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括行程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、存储器、block I/O与网络。

Docker的三个重要概念:Dockerfile,image,container

image:镜像,可以看成是一个快照,通过一个镜像,可以创建许多不同的container容器。类似于类和对象。

container:容器,它就像一台台虚拟机,可以由相同或不同的镜像创建运行,相互之间不受影响。

阅读此文
⬆︎TOP