深度学习笔记-长期学习更新

一些概念

  • 多层感知机

    • 在输出层与输入层之间加入了一个或多个全连接隐藏层。即:含有至少一个隐藏层的由全连接层组成的神经网络
    • 每个隐藏层的输出通过激活函数进行变换,实现非线性变换
    • 常用的激活函数包括ReLU函数、sigmoid函数和tanh函数
  • softmax回归与logistic回归

    • softmax处理多分类问题,logistic处理二分类问题

libcpwn漏洞利用-持续更新

ROP

ret2syscall

通过ROPgadget跳来跳去给eax-edx赋值,最后跳到int 0x80上来触发execve

ret2libc

这个感觉有点意思,首先需要通过write或者puts来泄漏__libc_start_main的地址,然后通过LibcSearcher找到system的偏移,再ret到system。下面详细解析一下exp

论文阅读-Binary Security of WebAssembly

Everything Old is New Again: Binary Security of WebAssembly

1. 概述

主要在浏览器、node、WASM独立VM三种平台进行漏洞验证。

WASM基本指令介绍:
global.get: 把全局变量的值压栈
global.set: 从栈顶弹出值赋给全局变量
local.tee: local.tee指令会把操作数留在栈顶,locat.set会弹出。local区别就是局部变量。
i32.const: 立即数压栈
i32.load: 从内存读数压栈
i32.store: 数据弹栈写入内存

Java静态分析&gadgetinspector改造扫描sb

看了大哥写的java字节码静态分析审计工具,有点想法,做一个直接分析字节码的静态审计工具,而不需要像codeql那样需要编译。

文中这个思路完全仿照cobra,从sink到source,根据callee或者assign来回溯,没有用到cfg,完全的数据流分析。
我感觉他这么做有两个问题:

  1. 比如https://xz.aliyun.com/t/7979,用了@Valid,他的控制流是跳来跳去的,如果只是看callee或者assign stmt,跟到一半必然断,造成漏报。
  2. 这种很简陋的污点分析最大的问题应该是误报严重。

LFYLangCompiler报告

1. 编译器整体架构设计及总体情况

目前LLVM比较火,因此就直接用了LLVM,还能顺便学一波LLVM Pass

前端

整体采用go语言实现,前端使用lex+goyacc,生成ast,然后手工将ast翻译成LLVM IR。

后端

后端直接使用LLVM套件llc将LLVM IR编译为机器码。

论文阅读-Security Charm of WASM

Security Charm of WASM

slide

  1. WASM基础概念介绍
    • 功能
    • 线性内存模型
    • 函数表
  2. Emscripten介绍和安全问题
    • Emscripten介绍
    • 对WASM做的加固
    • 还有可能出现的安全问题
  3. WASM新的利用方式(emscripten.h)
    • buffer flow -> XSS
    • indirect function calls -> XSS & RCE
      • 更骚的姿势(syscall, 内联eval)
  4. 结论
    • To 开发团队
    • To 开发者
    • 未来方向
      • 逆向堆实现
      • 测信道姿势?
      • 条件竞争有无?

LLVM IR优化笔记

基本概念

  • 基本块&CFG:用label和jmp分割代码,形成一个basicblock,以jmp结尾的basicblock向以目标label开头的basicblock连一条边,就形成了CFG
  • 局部代码优化:单个基本块内的优化
    • 删除局部公共子表达式
    • 删除无用代码(复制传播实现)
    • 常量合并(编译时计算常量值)
    • 代码移动(将循环中不变的表达式移到循环外)
    • 强度削弱(加代替乘)
  • 全局代码优化:多个之间的优化,从CFG入手