当前节点:rss
时间节点
2020年10月12日 15:293gstudent-Blog
0x00 前言


Outlook MAPI提供了一组访问Outlook的接口,用来扩展Outlook应用程序的开发,本文将会介绍Outlook MAPI的基本用法,开源一份Outlook MAPI的实现代码mapi_tool,便于后续的二次开发。

0x01 简介


本文将要介绍以下内容:


  基本知识
  使用Outlook MAPI访问Outlook资源
  开源代码mapi_tool
  mapi_tool功能介绍
  多种环境下的利用思路


0x02 基本知识


参考资料:

https://docs.microsoft.com/en-us/office/client-developer/outlook/mapi/outlook-mapi-reference

Outlook MAPI的使用前提:需要安装Outlook客户端

Outlook MAPI同EWS的区别:


  Outlook MAPI用来访问Outlook客户端中的资源
  EWS用来访问Exchange服务器中的资源


关于EWS的使用可以参考之前的文章《Exchange Web Service(EWS)开发指南》

Outlook客户端中的用户邮件存储在后缀名为ost的文件中,和Exchange服务器中的数据库保持一致

ost文件的默认保存位置:%LOCALAPPDATA%\Microsoft\Outlook\

MAPI主要包括以下三个功能:


  Address Books,设置E-mail type、protocol等参数
  Transport,文件的发送和接收
  Message Store,发送接收等信息的处理


0x03 使用Outlook MAPI访问Outlook资源


1.安装Outlook客户端并配置参数

2.启动Outlook客户端进行用户登录

3.使用C Sharp开发程序,实现读取收件箱邮件的功能

参考资料:

https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook?view=outlook-pia

https://docs.microsoft.com/en-us/office/vba/api/outlook.namespace

开发环境:VS2015

新建工程,选择控制台应用
2020年10月12日 15:293gstudent-Blog
0x00 前言


Pupy是使用Python开发的跨平台远程管理和后期开发工具,支持很多实用的功能。

本文将要对Pupy在Windows平台的启动文件类型、连接方式和通信协议进行介绍,将其中的后渗透模块进行分类,逐个介绍功能

0x01 简介


本文将要介绍以下内容:


  安装方法
  支持的启动文件类型
  支持的连接方式
  支持的通信协议
  后渗透模块介绍


0x02 安装方法


1. 使用docker

说明文档:

https://github.com/n1nj4sec/pupy/wiki/Installation

2.直接安装

git clone --recursive https://github.com/n1nj4sec/pupy
cd pupy
python create-workspace.py -DG pupyws
pupyws/bin/pupysh


注:

使用-DG参数将从https://github.com/n1nj4sec/pupy/releases/download/latest/payload_templates.txz下载模板文件

0x03 支持的启动文件类型


启动pupy后,输入gen -h获得生成启动文件的说明,如下图



这里逐个进行介绍

1.client

生成exe格式的文件

生成64位exe文件的命令示例:

gen -f client -A x64


这个命令将从pupy/pupy/payload_templates/读取模板文件,添加配置信息后生成最终的exe文件

注:

上述命令对应的模板文件名称为pupyx64.exe,模板文件对应的下载链接:https://github.com/n1nj4sec/pupy/releases/download/latest/payload_templates.txz

2.py

生成一个完全打包的Python文件(所有依赖项都从内存打包并执行)

命令示例:

gen -f py


这个命令会生成一个Python文件,内容的格式如下:

import zlib,marshal;exec marshal.loads(zlib.decompress('xxxxxxxxx')


其中'xxxxxxxxx'为加密的内容

加密的方法大致为使用marshal.dumps对代码进行序列化,再
2020年10月12日 15:293gstudent-Blog
0x00 前言


通过Zimbra SOAP API能够对Zimbra邮件服务器的资源进行访问和修改,Zimbra官方开源了Python实现的Python-Zimbra库作为参考

为了更加了解Zimbra SOAP API的开发细节,我决定不依赖Python-Zimbra库,参照API文档的数据格式尝试手动拼接数据包,实现对Zimbra SOAP API的调用

0x01 简介


本文将要介绍以下内容:


  Zimbra SOAP API简介
  Python-Zimbra简单测试
  Zimbra SOAP API框架的开发思路
  开源代码


0x02 Zimbra SOAP API简介


Zimbra SOAP API包括以下命名空间:


  zimbraAccount
  zimbraAdmin
  zimbraAdminExt
  zimbraMail
  zimbraRepl
  zimbraSync
  zimbraVoice


每个命名空间下对应不同的操作命令,其中常用的命名空间有以下三个:


  zimbraAdmin,Zimbra邮件服务器的管理接口,需要管理员权限
  zimbraAccount,同Zimbra用户相关的操作
  zimbraMail,同zimbra邮件的操作


Zimbra邮件服务器默认的开放端口有以下三种:

1.访问邮件

默认端口为80或443

对应的地址为:uri+"/service/soap"

2.管理面板

默认端口为7071

对应的地址为:uri+":7071/service/admin/soap"

3.管理面板->访问邮件

从管理面板能够读取所有用户的邮件

默认端口为8443

对应的地址为:uri+":8443/mail?adminPreAuth=1"

0x03 Python-Zimbra简单测试


参考地址:

https://github.com/Zimbra-Community/python-zimbra

http://zimbra-community.github.io/python-zimbra/docs/

对于自己的测试环境,需要忽略SSL证书验证,使用如下代码:

import ssl
ssl._create_default_https_context = ssl._create_unverif
2020年10月12日 15:293gstudent-Blog
0x00 前言


在上篇文章《Mimilib利用分析》提到mimilib可作为WinDbg的插件进行使用,所以本文将会详细介绍这个插件的用法,实现从内核模式转储文件中导出口令,结合利用思路给出防御建议

0x01 简介


本文将要介绍以下内容:


  dump文件的分类
  两种dump文件的导出方法
  WinDbg环境配置
  利用思路
  防御建议


0x02 dump文件的分类


dump文件分为以下两类:

1.User-Mode Dump File

即用户模式转储文件,分为以下两种:


  Full User-Mode Dumps
  Minidumps


简单理解:通常是针对单个进程

更多参考资料:

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/user-mode-dump-files

创建方法:

可以使用Procdump进行创建

从用户模式转储文件导出口令的方法:

可参考之前的文章《渗透基础-从lsass.exe进程导出凭据》

2.Kernel-Mode Dump Files

即内核模式转储文件,分为以下五种:


  Complete Memory Dump
  Kernel Memory Dump
  Small Memory Dump
  Automatic Memory Dump
  Active Memory Dump


简单理解:包括所有进程的信息

创建方法:

启动创建转储文件的功能,在系统崩溃(BSOD)时将自动创建

更多参考资料:

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/kernel-mode-dump-files

0x03 从内核模式转储文件导出口令的方法


流程如下:

1.开启转储文件的功能
2.强制系统蓝屏(BSOD),系统将会自动创建内核模式转储文件
3.使用WinDbg加载转储文件,调用mimilib导出明文口令

具体需要注意以下问题:

1.开启转储文件的功能

对应注册表位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl,注册表项CrashDumpEnabl
2020年10月12日 15:293gstudent-Blog
0x00 前言


在之前的文章《域渗透——DNS记录的获取》和《域渗透——普通用户权限获得DNS记录》介绍了在域环境下获得DNS记录的方法,有助于我们快速了解域内的网络架构。

但是,DNS记录只能作为辅助判断,DNS记录、DNS记录中对应的MachineAccount(机器帐户)和实际的计算机三者之间不存在对应关系

域内的非特权用户能够自由创建DNS记录和MachineAccount

本文将要介绍域内非特权用户创建DNS记录与MachineAccount的方法,记录需要掌握的知识点

0x01 简介


本文将要介绍以下内容:


  MachineAccount简介
  非特权用户创建MachineAccount的方法
  非特权用户创建DNS记录的方法


0x02 MachineAccount简介


1.MachineAccount

每当一个计算机加入域中,都会创建一个机器帐户(MachineAccount),作为”Domain Computers”组的成员

在域环境中可以通过以下命令获得所有机器帐户的列表:

net group "Domain Computers" /domain


每一个机器帐户名以字符$结尾

注:

使用Mimikatz的DCSync功能导出所有用户hash时,也会导出所有机器帐户的hash

如果获得了机器帐户的hash,可以用来制作白银票据(Silver Ticket),接着获得对应服务的访问权限,利用方法可参考之前的文章《域渗透——Pass The Ticket》

2.MachineAccountQuota

用来表示允许用户在域中创建的计算机帐户数,默认为10

说明文档:

https://docs.microsoft.com/en-us/windows/win32/adschema/a-ms-ds-machineaccountquota

关于MachineAccountQuota(MAQ)的介绍可参考资料:

https://blog.netspi.com/machineaccountquota-is-useful-sometimes/

这里仅对参考资料中提到的10个规则做简要总结并添加个人理解,特点如下:

(1)允许非特权用户通过MAQ创建计算机帐户,默认为10个,但无法删除创建的计算机账户

禁用MAQ的方法可参考:https://socia
2020年10月12日 11:29PansLabyrinth
之前在群里看到有人发了一个挑战,号称将 5 ETH 的私钥放在了加密的代码中,只要有人能解密就可以取走,所以我又管不住自己这双手了。
前言
某天在群里看到一个大佬看到另一个大佬的帖子而发的帖子的截图,如下所示:

 pediy">
        
    pediy
    
不过当我看到的时候已经过去了大概720小时🙂 在查看该以太币交易记录的时候,发现在充值之后十几小时就被提走了,可能是其他大佬也可能是作者自己。虽然没钱可偷,但幸运的是 pyc 的下载地址依然有效,所以我就下载下来研究了一下。
初步分析
首先在专用的实验虚拟机里运行一下,程序执行没有问题:
$ python2 ether_v2.pyc
Input UR answer: whatever
You are too vegetable please try again!
然后看看文件里是否有对应的字符串信息:
$ grep vegetable ether_v2.pyc
很好,屁都没有,看来字符串也混淆了。
目前市面上有一些开源的 pyc 还原工具,比如:

uncompyle6
pycdc
…

但是看作者的自信,应该是有信心可以抗住的,事实证明也确实可以。
Python 反汇编
既然没有现成工具能用,那么我们就需要通过自己的方法来对代码逻辑进行还原。要分析代码逻辑第一步至少要把字节码还原出来,使用 dis 模块可以实现:
import dis
import marshal
with open('ether_v2.pyc', 'rb') as f:
	magic = f.read(4)
	timestamp = f.read(4)
	code = marshal.load(f)
	dis.disassemble(code)
.pyc文件本身是字节码的marshal序列化格式,在 Python2.7 中加上 8 字节的 pyc 头信息。一般通过上面的代码即可打印出文件中的字节码信息。当然,这个事情并不一般:
$ python2 try1.py
Traceback (most recent call last):
  File "try1.py", line 9, in <module>
    dis.disassemble(code)
  File "/usr/li
2020年10月12日 11:29PansLabyrinth
国庆几天在家写了个用于辅助 JNI 接口逆向分析的工具,同时支持 Ghidra、IDA 以及 Radare2。本文即是对这个工具的简单介绍,以及一些编写插件的体验记录。
前言
平时进行安卓逆向时,一个常见的场景就是目标把关键逻辑放到 Native 代码中,使用 JNI 接口进行实现。进行分析一般是把对应的动态库so拖进逆向工具中,然后定位具体的 Native 实现,再对参数类型、JNI 调用等逻辑进行一些优化方便对反汇编/反编译代码的理解。比如对于大家常用的 IDA-Pro 就是 Parse C Header 加载 jni_all.h,然后修改 JNI 接口的函数原型和变量结构。
这对于少量代码来说不是大问题,但显然是一种重复性的劳动,因此我们可以对这个过程进行一定的自动化。目前已经有了一些优秀的项目,比如 aryx 的 JNIAnalyzer,这是一个 Ghidra 插件,支持从 apk 中提取 JNI 接口并批量修改动态库的函数原型。但是这些项目都存在一些问题,而且缺乏拓展性,所以为了方便自己使用就构建了 JNI Helper 项目,支持各类日常使用的逆向工具。
JNI Helper
该项目的详细介绍可以参考 Github,其主要特性有下面这些:

基于 Jadx api 提供一个独立的 Java 可执行程序 JadxFindJNI.jar,用来分析 apk 并提取其中的 JNI 接口信息,并产出一个 JSON 文件;
同时支持 C 和 C++ 类型的 JNI 接口实现;
支持重载的 JNI 函数;
分别实现了 Ghidra、IDA 和 Radare2 的插件用来加载 JadxFindJNI.jar 生成的 JSON 文件;

JadxFindJNI.jar
得益于 Jadx 项目整洁的函数接口,我们可以很方便在其基础上实现自己的功能,如下所示:
JadxArgs jadxArgs = new JadxArgs();
jadxArgs.setDebugInfo(false);
jadxArgs.setSkipResources(true);
jadxArgs.getInputFiles().add(new File(args[0]));
JadxDecompiler jadx = new JadxDecompiler(jadxArgs);
jadx.load();
我们需要实现的主要功能就是调用 Jadx 分
2020年10月12日 11:29PansLabyrinth
博客从 Jekyll 迁移到 Hugo,以及最近一些折腾的感悟。
个人博客那些事
其实从很早的时候就开始了个人博客网站的搭建,最初得益于 github.io 域名的开放。总的来说,我搭建博客的历史主要分为三个阶段。
第一阶段
第一阶段属于简单至上主义。这个时期使用 Jekyll 作为主要的静态博客生成引擎,可以方便地使用 Markdown 来进行写作,并且这也是 Github Pages 官方支持的。

img2Jekyll">
        
    Jekyll
    
最初是使用了一个简单的模板,后来随着需求日益增加,比如需要标签、目录、侧边栏等功能,于是又转投了另一个主题。
第二阶段
由于在第一阶段中日益增长的定制需求和静态博客的限制矛盾,这个时期开始了一段折腾的造轮子历程。在这个阶段,我用 Python (Django) 写了一个完整博客系统,命名为 berserk (因为当时喜欢听阿姆)。该博客支持以下功能:

支持 Markdown 渲染,文章目录、代码语法高亮、自适应文章布局
支持文章分类、标签,以及这些属性的数据库管理
支持页面访问统计、评论
支持后台管理 (基于定制的Django-Admin)
支持在后台使用类似 VIM 的键盘映射来编写文章
支持真实后台管理页面的隐藏以及虚假后台页面的蜜罐和告警 (没错)

此外因为当时工作接触了一些新潮前端概念,还尝试将一套前后端分离的模式融入到系统中。学习 ReactJS 并折腾了一段时间后发现和 Django 原本的模板系统格格不入,然后就又去掉了。

img3berserk">
        
    berserk
    
这个博客系统一直缝缝补补并使用了很一段时间,充满了各种奇怪的前后端 tricks。期间也遇到过各种问题,比如整天被乌克兰的机器人在评论区发广告,于是又加入了人机验证,诸如此类。……直到有一天发现这一切和我的初衷(写博客)似乎没什么直接关系,于是又怀念起了以前用 Jekyll 的那段开心时光。
第三阶段
在自建博客前后端被搞的焦头烂额之后,我又回到了 Jekyll 的怀抱。其实是在自建博客期间看到了许多优秀的 Jekyll 主题完全可以满足我的要求,所以才最终回归。并且在内心暗暗下决心: 再也不折腾了。
不过还是小小折腾了一下,在此期间对一个小众的主题进行了一些简单的定制和优化。这个阶段算是返璞归真,没有了后端的琐事,可以
2020年10月12日 11:29PansLabyrinth
gdb也用了好几年了,虽然称不上骨灰级玩家,但也有一些自己的经验,因此分享出来给大家,顺便也作为一个存档记录。
多进程调试
最近在调试一个漏洞的exploit时遇到一个问题。目标漏洞程序是一个 CGI 程序,由主进程调起,而且运行只有一瞬的时间;我的需求是想要在在该程序中下断点,在内存布局之后可以调试我的 shellcode,该如何实现?当然目标程序是没有符号的,而且我希望下的断点是一个动态地址。在 lldb 中有--wait-for,gdb 里却没有对应的命令,经过多次摸索,终于总结出一个比较完美的解决方案。
示例程序
这里构建一个简单的示例来进行实际演示。首先是父进程:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

int main(int argc, char **argv, char **env) {
    printf("parent started, pid=%d\n", getpid());

    char *line = NULL;
    size_t len = 0;
    ssize_t read;
    while ((read = getline(&line, &len, stdin)) != -1) {
        pid_t pid = fork();
        if (pid == -1) {
            perror("fork");
            break;
        }

        if (pid == 0) {
            printf("1 fork return in child, pid=%d\n", getpid());
            char *const av[] = {"child", line, NULL};
            if (-1 == execve("./child", av, env)) {
                perror("execve");
                break;
            }
    
2020年10月12日 11:29PansLabyrinth
之前写了一篇深入浅出ELF,作为姊妹篇这次就来聊聊MacOS的可执行文件格式MachO。
Mach-O 101
在之前的文章中我们说过,可执行文件的使命有两个,一是方便开发者在编译、链接时提供可扩展的封装结构;二是在执行时能给操作系统(内核)提供内存映射信息。MachO也不例外。
MachO本身没有什么特别的含义,就是Mach object的简写,而Mach是早期的一个微内核。和ELF一样,MachO也极具拓展性,从全局视角来看,MachO文件可以分为三个部分,分别是:

Mach Header: 文件头信息
可变长度的LOAD_COMMAND信息
上述LOAD_COMMAND中所用到的具体信息(segments)

这里的segment可以理解为一段连续的内存空间,拥有对应的读/写/执行权限,并且在内存中总是页对齐的。每个segment由一个或者多个section组成,section表示特定含义数据或者代码的集合(不需要页对齐)。在macOS中,通常约定segment的名称为双下划线加全大写字母(如__TEXT),section的名称为双下划线加小写字母(如__text)。
下面对这三个部分进行分别介绍。

注: MachO文件结构的表示通常分为32位和64位两种,本文以64位为例,毕竟这是历史的进程。

Header
文件头信息参考mach-o/loader.h中的定义如下:
/*
 * The 64-bit mach header appears at the very beginning of object files for
 * 64-bit architectures.
 */
struct mach_header_64 {
	uint32_t	magic;		/* mach magic number identifier */
	cpu_type_t	cputype;	/* cpu specifier */
	cpu_subtype_t	cpusubtype;	/* machine specifier */
	uint32_t	filetype;	/* type of file */
	uint32_t	ncmds;		/* number of load commands */
	uint32_t	sizeofcmds;	/* the size of all the load commands *
2020年10月12日 11:29PansLabyrinth
本文介绍了ELF的基本结构和内存加载的原理,并用具体案例来分析如何通过ELF特性实现HIDS bypass、加固/脱壳以及辅助进行binary fuzzing。
前言
作为一个安全研究人员,ELF可以说是一个必须了解的格式,因为这关系到程序的编译、链接、封装、加载、动态执行等方方面面。有人就说了,这不就是一种文件格式而已嘛,最多按照SPEC实现一遍也就会了,难道还能复杂过FLV/MP4?曾经我也是这么认为的,直到我在日常工作时遇到了下面的错误:
$ r2 a.out
Segmentation fault
作为一个开源爱好者,我的radare2经常是用master分支编译的,经过在github中搜索,发现radare对于ELF的处理还有不少同类的问题,比如issue#17300以及issue#17379,这还只是近一个月内的两个open issue,历史问题更是数不胜数。
总不能说radare的开发者不了解ELF吧?事实上他们都是软件开发和逆向工程界的专家。不止radare,其实IDA和其他反编译工具也曾出现过各类ELF相关的bug。
说了那么多,只是为了引出一个观点: ELF既简单也复杂,值得我们去深入了解。网上已经有了很多介绍ELF的文章,因此本文不会花太多篇幅在SPEC的复制粘贴上,而是结合实际案例和应用场景去进行说明。
ELF 101
ELF的全称是Executable and Linking Format,这个名字相当关键,包含了ELF所需要支持的两个功能——执行和链接。不管是ELF,还是Windows的PE,抑或是MacOS的Mach-O,其根本目的都是为了能让处理器正确执行我们所编写的代码。
大局观
在上古时期,给CPU运行代码也不用那么复杂,什么代码段数据段,直接把编译好的机器码一把梭烧到中断内存空间,PC直接跳过来就执行了。但随着时代变化,大家总不能一直写汇编了,即便编译器很给力,也会涉及到多人协作、资源复用等问题。这时候就需要一种可拓展(Portable)的文件标准,一方面让开发者(编译器/链接器)能够高效协作,另一方面也需要系统能够正确、安全地将文件加载到对应内存中去执行,这就是ELF的使命。

view.pngview">
        
    view
    
从大局上看,ELF文件主要分为3个部分:

ELF Header
Section Header Table
Program 
2020年10月12日 11:29PansLabyrinth
昨天去参加了mosec2020的安全会议,这也是我第一次参加mosec,议题质量比预料中的要高,因此在这记录一下其中几个有意思的议题。
IO80211Family
第一个议题是王宇师傅(@keenjoy95)关于苹果WiFi子系统的安全研究分享,其实王宇在前一段时间就提了一大波苹果蓝牙子系统的漏洞,看来手里的料还是挺多的。之所以去撸WiFi子系统,也是因为“之前的一个0day在升级系统后不work了”,……说回思路方面,研究入口的寻找个人认为比较有启发性,利用Kemon的内核挂钩能力,确实可以做到往上拳打daemon process,往下脚踢kernel driver或firmware。

 km">
        
    km
    
IO80211Family V1/V2的这些漏洞,也是因为在接口上发现有巨大的参数传入。一方面通过修改Kemon实现Passive Fuzzer,另一方面去逆向对于这些参数的处理和校验从而优化样本。效果怎么样呢?也就是“每天和panic打交道,对于一些品相不好的panic都懒得去分析”的地步吧。
另外,对于这些复杂的设备驱动,可以参考开源代码(AppleIntelWiFiMVM),甚至自己去实现一遍,这样可能在分析时会有不一样的理解。
像WiFi、蓝牙、NFC这些攻击面其实影响是很大的,而这部分驱动或者firmware的开发者由于自恃功能复杂天知地知或者抱着能用就行的心理,对一些不可信数据没有意识添加完善的边界检查,导致实现往往在遇到非预期输入时存在bug或者漏洞从而引起内存破坏。这部分分析一个绕不过的门槛是逆向的基本功,安全研究人员做好头发的保养工作还是很有必要的。

另外王宇也提到了他在macbook touchbar图像驱动中也是有0day的,感兴趣的同学也可以尝试去撞一下:)

DroidCorn: 无源码Android Binary Fuzzing
这个议题是flanker(@Flanker_017)介绍了他(们?)做的一个无源码fuzzing框架。说到无源码fuzz,常见的两个流派就是binary patch和dynamic instrument,而DroidCorn听名字也大概能猜到了,就是基于Unicorn开发的动态插桩式执行引擎。
该引擎架构大致分为以下部分:

Crash Triager

Trace Recorder
Symbolizer


Mini
2020年10月12日 11:29PansLabyrinth
最近在分析一个运行Android系统的IoT平台,其中包含设备管控和日志服务(Agent)、升级服务(FOTA)、自定义桌面(Launcher)、端上IDS以及前台的图形界面应用等多个前后台进程。在对其中某个功能进行逆向时发现调用链路跨越了多个应用,因此本文就做个简单记录。
前言
熟悉安卓开发的同学应该都知道构建IPC的流程,但从逆向工程的角度分析的却比较少见。 说到安卓跨进程通信/调用,就不得不提到AIDL和Binder,在逆向一个东西之前,首先需要了解它,因此本文也会先对其工作流程和工作原理进行介绍。
AIDL 101
AIDL是Google定义的一个接口定义语言,即Android Interface Definition Language。两个进程(称为客户端和服务端)共享同一份AIDL文件,并在其基础上实现透明的远程调用。
从开发者的角度如何使用AIDL呢?下面参考Android的官方文档以一个实例进行说明。我们的目标是构建一个远程服务FooService,并且提供几个简单的远程调用,首先创建AIDL文件IFooService.aidl:
package com.evilpan;

interface IFooService {
    void sayHi();
    int add(int lhs, int rhs);
}
AIDL作为一种接口语言,其主要目的一方面是简化创建IPC所需要的IPC代码处理,另一方面也是为了在多语言下进行兼容和适配。使用Android内置的SDK开发工具可将其转换为目标语言,本文以Java为例,命令如下:
aidl --lang=java com/evilpan/IFooService.aidl -o .
生成的文件为IFooService.java,文件的内容后面再介绍,其大致结构如下:
public interface IFooService extends android.os.IInterface {
    /** Default implementation for IFooService. */
	public static class Default implements com.evilpan.IFooService
  {
  	// ...
  }
	/** Local-side IPC implementation stub class. */
2020年10月12日 11:29PansLabyrinth
本文主要记录一下对身份证加密芯片和SAM密码模块的相关资料搜索过程,并(尽量)总结归纳一下搜索中的一些经验和心得。
2020年10月12日 11:29PansLabyrinth
本文主要介绍椭圆曲线的基本原理以及基于椭圆曲线的密码学实现,包括ECC加密、ECDH秘钥交换以及ECDSA签名算法,并介绍其中潜在的一些安全问题。其中分析了两个ECC实现相关的真实案例,分别是索尼PS3的签名问题和美国国家安全局NSA留下的椭圆曲线后门。
2020年10月11日 18:28PHITHON BLOG
在开发国际化网站的时候,难免会与时区打交道,通用CMS更是如此,毕竟其潜在用户可能是来自于全球各地的。Django在时区这个问题上下了不少功夫,但是很多资深的开发者都有可能尚未完全屡清楚Django中各种时间的实际意义和使用方法,导致写出错误的代码;作为安全研究人员,时区问题也可能和一些安全问题挂钩,比如优惠券的过期时间、订单的下单与取消时间等,如果没有考虑时区问题,有可能将导致一些逻辑漏洞。
本
2020年10月11日 17:08胡涂说
本文为周刊第五期,但距离前一期已经过去半年。叫周刊似乎不合适,但又想到更好的名字,暂且用这个名字,只不过会不定期发布。前四期: 周刊开刊, 周刊第二期, 周刊第三期, 周刊第四期。

文摘

1. Excel 导致新冠数据上报缺失

原文: Excel: Why using Microsoft’s tool caused Covid-19 results to be lost

因为使用 Excel 的旧版格式 XLS 导致英国有一万六千多例新冠名单没有上报。为什么呢?因为 xls 格式的文档中一个表最多只支持 65535 行单元格,而其他的数据丢失了。XLS 是 Excel 旧文档格式,从 Office 2007 起开始采用新的 XLSX 格式文档,只不过一直兼容旧文档格式。


  The badly thought-out use of Microsoft’s Excel software was the reason nearly 16,000 coronavirus cases went unreported in England.


2. 法国酒吧店主因为提供的 WIFI 没有保留日志被逮捕

原文: French bar owners arrested for offering free WiFi but not keeping logs

至少五名法国酒吧店主因为提供给客人的免费 WIFI 没有保留日志记录而被捕,因为违反了法国因反恐而出台的 2006-64 法律条款:任何 ISP (Internet service provider) 提供商必须保留一年的连接日志记录。而违反此条款意味着将面临一年的牢狱和最多七万五千欧元的罚款。


  At least five bar owners in Grenoble, France have been arrested for providing WiFi at their businesses without keeping logs. The bar owners were arrested under a 2006 law that technically classifies WiFi hotspot providing establishments as ISPs, and requires them to store one year’s
2020年10月10日 10:48面向信仰编程
2020年10月9日 18:27tyler_download的专栏
在代码运行时需要临时存放各种信息,例如函数调用时的输入参数,局部变量等,这些信息存储在一种叫做”栈“的数据结构上。它的特点是后进先出,也就是最后存储到栈里面的数据将会最先被取出来。X86体系自带栈结构,寄存器ESP,EBP专门用于对栈进行操作。EBP指向栈所在的内存地址,ES[图片上传中…(截屏2020-09-30 下午3.56.59.png-a3f002-1601452956326-0)]
P指向数据进入或弹出堆栈所在的位置,同时对于栈操作的指令有push,pop,call,leave,enter,ret                    
                        作者:tyler_download 发表于 2020/10/09 18:06:32 原文链接 https://blog.csdn.net/tyler_download/article/details/108983594                    
                    
                        阅读:161 评论:1 查看评论
2020年10月9日 17:27胡涂说
背景

去年因为换部门的原因,我从原工位搬走,有很多旧书,送了些给同事,仍有一大堆需搬走。我便在想,这些旧书是否有更好的处理方式。我自己喜欢买书,但看完的书就成了鸡肋,丢掉也不舍得。虽然有多抓鱼、孔夫子这种旧书平台,但仍不是我理想中的处理旧书的方式。理想中的应该是像图书馆那样,想看的人去借阅,到了时间归还或传递给下一位借书人。因此,如果能有一个网上平台,大家可以把闲置的书籍共享出来,在网上自由流动,由需要的读者借阅,看完后再传递给下一个读者;就像是图书漂流,永远传递下去,这样会很有意思也很有意义。

我发现国外有个叫 bookcrossing 的网站1,建站时间比亚马逊还早,很像我说的这种网上平台。bookcrossing 即图书漂流,玩法是在网站登记闲置书籍,用户得到一个唯一的图书编号 BCID, 下载带有 BCID 的标签,打印贴到书上。然后可以将书送人或放到“野外”:咖啡厅、车站、旅游景点等,等着被人“抓到”。这种图书漂流的方式挺有趣,不过问题是捡到书的人不一定会到网站上去登记,这样图书追踪信息会丢失。

而国内我也没找到类似的图书分享网站,于是就想不如自己动手做一个。说干就干,于是买了个 zhimaishu.com(只买书)的域名2,准备做个图书分享的平台。“只买书”这个名字源于我在公司内创建的一个兴趣组织“只买书不读书”,这是一个线上的团队,最多的时候有四千多人加入。团队成员还会自发组织一些线下读书活动,上个月在深圳开会时遇到一位未谋面的同事,她认出了我并提到“只买书不读书”团队,让我感到惊喜。因此,对“只买书不读书”这个名字我是很有感情的,而为了让域名短一些就取了前三个字。

设计实现

“只买书”的流程设计与 bookscrossing.com 不太一样:用户通过线下传递书籍,然后在“只买书”网上平台上记录追踪过程。一个常规的分享书流程如下:1) 藏书人在“只买书”上登记书本;2) 藏书人发布共享图书信息;3) 借书人浏览到共享图书信息并申请该书;4)藏书人确认申请并约定交书地点时间;5) 线下传递书本后,在“只买书”上确认。6) 书本成为共享图书后不能为私人所有,等到借书人看完或不再需要,下一位借书人会申请该书,重复上述3~5流程。

产品技术选型我考虑用微信小程序,因为微信的用户基础以及不需要额外的应用安装、跨平台;后台数据存储处理采用 ruby on rails3, 作 api server.
2020年10月9日 17:27胡涂说
TL;DR 本文较长,如果对 Git 内部实现不感兴趣可以快速跳过中间两个章节。


  吾诗已成。无论大神的震怒,还是山崩地裂,都不能把它化为无形!

  —— 奥维德《变形记》


背景

Linux 作为最大也是最成功的开源项目,吸引了全球程序员的贡献,到目前为止,共有两万多名开发者给 Linux Kernel 提交过代码。令人惊讶的是,在项目的前十年(1991 ~ 2002)中,Linus 作为项目管理员并没有借助任何配置管理工具,而是以手工方式通过 patch 来合并大家提交的代码。倒不是说 Linus 喜欢手工处理,而是因为他对于软件配置管理工具(SCM)非常挑剔,无论是商用的 clearcase 还是开源的 cvs、svn 等都不能入他的法眼。在他看来,一个能够满足 Linux 内核项目开发使用的版本控制系统需要满足几个条件: 1) 快 2)支持多分支场景(几千个分支并行开发场景) 3) 分布式 4) 能够支持大型项目。直到2002年,Linus 终于找到了一款基本满足他要求的工具——BitKeeper, 而 BitKeeper 是商业工具,他们愿意给 Linux 社区免费使用,但是需要保证遵守不得进行反编译等条款。BitKeeper 提供的默认接口显然不能满足社区用户的全部需要,一位社区开发者反编译 BitKeeper 并利用了未公开接口,这让 BitKeeper 公司撤回了免费使用的 License。不得已,Linus 利用假期十天时间,实现一款 DVCS —— Git,并推送给社区开发者们使用。

设计

Git 已经成为全球软件开发者的标配,关于 Git 的介绍和用法不需多说,我今天想要谈谈 Git 的内部实现。不过在看本文之前,我先给大家提一个问题:如果是你来设计 git(或者重新设计 git),你打算怎么设计?第一个版本发布准备实现哪些功能?看完本文,再对照自己的想法做个比较。欢迎留言讨论。

学习 Git 的内部实现,最好的办法是看 Linus 最初的代码提交,checkout 出 git 项目的第一次提交节点(方法参见博客:《阅读开源代码小技巧》),可以看到代码库中只有几个文件:一个 README,一个构建脚本Makefile,剩下几个 C 源文件。这次 commit 的备注写的也非常特别: Initial revision of “git”, the information man
2020年10月9日 17:27胡涂说
在上一篇博客中谈到开源软件,开源软件可以上溯到自由软件,而自由软件可以上溯到黑客社区的传统。那么什么是黑客呢?黑客这个词源于1960年代 MIT 的一个学生俱乐部,当时他们将快速解决问题的方式叫做 hack, 解决问题的过程叫 hacking, 解决问题的人即 hacker, 翻译过来也就是黑客。自由软件的发起者 Richard Stallman (RMS) 说:“出于兴趣而解决某个难题,不管它有没有用,这就是黑客。”随着自由软件和开源软件的兴起,黑客们找到了更符合自己身份的标签:用自由软件/开源软件解决计算机问题。

不过随着互联网的普及,另外一种行为也被媒体打上“黑客”的标签:通过网络攻击入侵别人的计算机系统并破坏或获取利益。从事网络攻防的计算机高手又被称为网络黑客或安全黑客 (security hacker), 从事保护行为的被称为白帽黑客,从事破坏行为的被称为黑帽黑客。不过这些说法不被原黑客社区的人所接受,开源软件发起者 Eric Raymond (ESR) 等人将从事网络安全破坏的人称为“骇客” (cracker)。

本文所说的黑客取开源社区对于黑客的定义,即不为陈规旧律所束缚、有能力解决计算机类问题、编写开源软件的技术极客们。ESR 写了一篇文章,标题即为 “How to become a hacker”。文中提到了四点:学习编程、学习并使用开源的 Unix-like 系统、学习互联网及 HTML 编程、学习英语。1

这四点是黑客的技能基础,而如果想要修炼成黑客大师最好的方法还是去跟随并模仿大师们的行为,文中引用一首禅诗作为示意:


  修行之道: 
关注大师的言行, 
跟随大师的举动, 
和大师一并修行, 
领会大师的意境, 
成为真正的大师。


1984年,史蒂文•利维 (Steven Levy) 出版了第一本介绍黑客的著作《黑客:计算机革命的英雄》(Hackers: Heroes of the Computer Revolution)。在书中,他将黑客的价值观总结成了六条“黑客伦理”(hacker ethic):2


  使用计算机以及所有有助于了解这个世界本质的事物都不应受到任何限制。任何事情都应该亲手尝试。 (Access to computers–and anything that might teach you something about the way the world
2020年10月9日 17:27胡涂说
从自由软件到开源软件

在计算机时代的上古年代,软件是作为计算机硬件的附属而存在,而且一般是附带源码,便于用户做修改或定制。而且在学术界和黑客社区,分享源码并在此基础上修改、添加功能是非常自然的事情。可以说,自由软件是计算机行业的传统,一直到1970年代中期前,软件是被鼓励自由拷贝的。这一切到了1970年代末,形式开始变化,比尔·盖茨的一封《致爱好者的一封信》标志着软件开始走向商业化和专有化。1978年,施乐公司提供给 MIT 人工智能实验室的打印机没有像往常一样附上源码,这个举动让当时在 MIT 工作的 Richard Stallman (以下简称 RMS) 愤怒了,同时他也感叹“一个时代结束了”。但他并没有对此妥协,在1984年 RMS 辞去 MIT 的工作,发起了 GNU (GNU’s not Unix) 计划,并成立了自由软件基金会(FSF),开启了他对抗专有软件之路。RMS 提出了自由软件的概念,并定义了四种自由(参见《若为自由故》)。RMS 还提出了 Copyleft 的授权方法,也也就是我们所熟知的 GPL 协议。除了这些概念上的创新,RMS 开始打造完全自由的软件系统 —— GNU: 从 emacs 编辑器,到 GCC 编译套件,以及各种软件工具和开发库,GNU 将 Unix 系统上的专有软件替换的差不多了,唯独还缺少了操作系统内核 —— Hurd.

而到了1991年,一位芬兰的大学生 Linus Torvalds 开始基于教学用的操作系统 Minix 打造他自己的玩具操作系统 —— Linux, 这一切都是为了好玩(参见《最著名的黑客》)。在发布了第一个版本0.01后,Linus 决定接受 RMS 的建议,采用 GPL 协议授权发布 Linux, 使它成为一个自由的操作系统软件。Linux 受到自由软件社区的追捧,而另一方面,以 Linux 内核制作发行版的商业公司也如雨后春笋般出现,这里面最知名的是红帽 Redhat 公司,他们发行了 Redhat Linux 并出售商业版及服务,取得巨大成功,公司于1999年上市。

相对于 RMS 对于自由软件哲学的执着,Linus 本人并不关心自由软件运动,而他管理下的 Linux 社区却日益发展壮大,Linus 本人也成为了新的黑客领袖。老牌黑客 Eric Raymond (以下简称 ESR) 在研究了 Linux 的开发过程后,发现 Linux 的
2020年10月9日 17:27胡涂说
周末去游玩了下口碑颇佳的莫干山,确切的说,并没有进入莫干山风景区,而是在莫干山裸心谷住了两晚。在携程上团购了个套餐,体验了一下这家传说中的网红酒店。不过说实在的,酒店并没有给我惊艳的感觉,反倒是服务让我觉得有些不值这个价格,垒土小屋房间比较小,唯一亮点的是伴着山谷而建,坐在小阳台看书,有点山居的感觉。



莫干山之行给我的最大感觉就是:人少。由于之前的黄山、张家界等名山的旅游经历,因此让我一想到名胜山川,就是那种摩肩接踵的感觉。而莫干山里的游客则比印象中少很多,有可能是疫情的关系,或者是因为我没有去风景区的关系,但人真的感觉不多。不过裸心谷和裸心堡客房都满了,人也感觉不多,可能是一共也没多少间客房吧。



莫干山的气质是秀美。行走在山谷中,并没有崇山峻岭般的压迫感,只是觉得是行走在竹林和乡间小路上。厌倦了每日的加班和压力,躲到山林里避暑却也是极好,连大卫都感叹说“他要整个暑假都住在这里”。有时候虽然小屋内有空调,但不如出来在阳台上躺在竹椅上纳凉,不是那么太热,却更能贴近大自然,看着林间的飞鸟和昆虫,回忆起了小时候在农村的生活。



我带了前段时间买的一本书《观看王维的十九种方式》,确切的说,应该是“翻译《鹿柴》的19+15种方式”。作者艾略特·温伯格,一位美国汉学家,点评了十九种对王维《鹿柴》一诗的翻译,首次出版后又增补了十多种翻译,这其中以英文翻译居多,还有意、法、西等。原书名为 19 Ways of Looking at Wang Wei with more ways. 也就是说,这是一本美国人用英语写的书,来介绍多种对王维一诗的翻译,再翻译成了中文的书。初看此书,会觉得作者真是吃饱了撑的,一首唐诗考据出这么多种翻译版本多闲的慌呀。《鹿柴》大家都已耳熟能详了:


  空山不见人, 
但闻人语响。 
返景入深林, 
复照青苔上。


全诗短小也容易理解,但不好翻译,如作者所引述的:“王维的四行诗难译”,“因为它们的平淡质朴”。王维的诗向来是富有禅意的,且所谓“诗中有画,画中有诗”,对《鹿柴》的翻译难免会丢失想象力。而且一千个人眼中有一千个哈姆雷特,每位读者对每首诗在每种情境下读都有不同的理解和感受,一经翻译则固化成了译者当时的理解,没有一个版本的翻译能让所有读者满意。隐居在莫干山的两日,读此诗倒是挺符合意境的,毕竟不是每天的情境下都适合读诗的。



在裸心谷散步的时候遇上阵雨,就到西餐厅里避雨,大卫拿
2020年10月9日 17:27胡涂说
Patrick Winston1 是 AI 领域的先驱,生前曾一直担任 MIT CSAIL(计算机科学与人工智能实验室)主任。他的课程以易于理解及信息丰富而闻名,因而,他也在 MIT 开设了一个 如何演讲 “How To Speak” 的课程。2

以下是我根据课程视频3及文字记录4总结的课程要点。如果你也试图提升自己的演讲技能,推荐观看这堂公开课。

军人上战场前要准备好武器,而学生从学校毕业进入社会时要准备的武器就是沟通能力。人的成功很大程度上取决于依次三种能力:说话的能力、写作的能力、思想的质量。(ability to speak, ability to write, and the quality of your ideas, in that order.) 而沟通(说话、写作)的质量取决于如下图右上角的这个公式,包括你有多少知识(knowledge),你对该知识的实践(practice),以及你的内在天分(talent)。(注意 T 很小。)



约定条款 (Rules of Engagement)

Patrick Winston 在开始讲课前要求听众关闭便携电脑和手机,因为人只有一个语言处理系统,如果听众在浏览网页或处理电子邮件,就没法专心听讲,甚至会影响周围的人。

开场 (How to Start)

讲笑话不是一个好的开场方式,更好的是许以承诺的方式开场。即告诉听众他们在这场演讲中了解到什么。

启发听众的技巧 (Sample Heuristics)


  重复 (cycle): 反复阐述主题。想让每个人都清楚的话,重要的事情说三遍。
  圈定范围 (build a fence): 明确自己表达的观点,以便于和其他概念区别开来。
  标记总结 (verbal punctuation): 听众可能会跟不上主题,适当总结观点以便于让听众回到课题中来。
  向听众提问 (ask a question): 适当停顿(7秒)给听众思考的时间。


选择合适的时间和地点 (Time and Place)


  最好的时间是上午11点。(早上没睡醒,午饭后又犯困。)
  会场的灯光要明亮。(昏暗的灯光让人昏昏欲睡。)
  做演讲前先熟悉会场。
  会场听众需要坐满超过半数。


使用工具 (The Tools)


  黑板/白板 (Boards): 通过黑板/白板可以画图展示,并且板书的速度正好能匹
2020年10月9日 17:27胡涂说
从新冠疫情开始时看《鼠疫》,结果国内疫情都控制下去了,我还没看完。断断续续直到上周才将《鼠疫》翻完,也许是很久不看小说的缘故,对这种多人多线程发展的故事有点处理不过来,最终印象里只留下了里厄大夫。里厄是全书中头脑最清醒的人,作为医生他始终记得自己的职责。他对整日思念情人的朗贝尔说:“与鼠疫斗争的唯一方式只能是诚实…就我的情况而言,我知道那是指做好我的本职工作。”每天从早到晚工作只休息四个小时,没时间多愁善感。而当鼠疫过去人们狂欢庆祝时,只有他明白:“也许有一天,鼠疫会再度唤醒它的鼠群,让它们葬身于某座幸福的城市,使人们再罹祸患,重新吸取教训。”

相比而言,《局外人》我则是一口气看完的,一是篇幅短,二是情节相对也简单些。主人公默尔索回家办理母亲的葬礼,因为疲劳没有在葬礼上表现出应有的悲伤。后来一次意外杀人被法庭审判,结果不是因为杀人而是因为他在葬礼上没有哭的行为背叛斩首示众。

默尔索认为“人生在世,永远也不该演戏作假。”可这句话似乎成了他悲剧命运的根源。他的律师劝他在法庭上说是控制了自己悲痛的感情,但他却说:“不,因为这是假话。”神父来帮他忏悔,他拒绝了:“我不愿人家来帮助我,而且我已经没有时间去对我不敢兴趣的事情再产生兴趣。”默尔索不演戏作假,可是这在众人眼里成了十恶不赦的罪状。

加缪被认为是存在主义的代表,虽然他本人否定是存在主义者,但他的作品确实都体现了存在主义的以人为本的思想。存在主义的维基百科词条解释如下:


  存在主义(英语:existentialism),是一个哲学的非理性主义思潮,它认为人存在的意义是无法经由理性思考而得到答案的,以强调个人、独立自主和主观经验。

  其最突出的命题是:世界没有终极的目标;人们发现自己处于一个隐隐约约而有敌意的世界中;世界让人痛苦;人们选择而且无法避免选择他们的品格、目标和观点;不选择就是一种选择,即是选择了“不选择”;世界和我们的处境的真相最清楚地反映在茫然的心理不安或恐惧的瞬间。


存在主义认为世界是荒谬的,加缪认为人因荒谬而反抗。一如每日不知疲倦推石头上山的西西弗,在这种永无止尽的徒劳的工作中获得自由的成就。无所谓意义,这就是人生。

摘抄两本书中一些段落如下:

《局外人》 柳鸣九 译


  最根本的问题,我再说一遍,仍是如何消磨时间。自从我学会了回忆,我终于就不再感到烦闷了。



  日子,过期了当然久长,但是拖拖拉拉,日复一日,年复一年,
2020年10月9日 17:27胡涂说
本文为周刊第四期,前三期: 周刊开刊, 周刊第二期, 周刊第三期。

文摘的标题将从原文标题改为简单的翻译。

文摘

1. 软件行业的招聘之恶

原文: The software industry’s greatest sin: hiring

标题有些夸张,不过作者从自己从事软件开发以及创办公司后招聘及管理软件开发者的经历,分析他认为软件行业招聘的问题。作者认为:软件行业招聘从不会关心应聘者的经历、过往的贡献、品质、性格、沟通能力等,仅仅关注应聘者的技术技能,或者说 IQ 测试,赢者通吃。还举了 Homebrew 作者因为不能当场在白板上实现二叉树而被 Google 面试拒绝的例子。


  Almost no other “white collar” profession I’m aware of will so completely and thoroughly ignore your actual proven ability, historical accomplishments, and holistic qualities, as part of the hiring process.


2. 大堡礁正在死亡

原文: Big parts of the Great Barrier Reef are dying

气候环境变化导致大堡礁加速死亡,但民众对此反应不一。

《经济学人》的标题一贯的双关修辞,印刷版的标题用的是 “In hot water”, 既指大堡礁的生存环境水温上升,也隐含澳大利亚受到山火、疫情、经济等影响的艰难处境。

3. SEO 毁了互联网

原文: How SEO Ruined the Internet

SEO(搜索引擎优化)是很多网站为了提升在搜索引擎(Google, 百度)上的排名而做的优化技巧。作者认为,网站 SEO 专家为了让自己的网站能获得更好的排名,而将互联网真正有价值的内容被淹没了。二十年前在 Google 上键入特定领域或学术词汇可以精准的得到期望内容,但现在几乎不可能了。作者也列举了 SEO 常用的一些策略,如改写/擦除历史(用排名高的旧链接引导用户跳转到新地址)、营销指导叙事(类似标题党、震惊体那种写作手法,追热点而忽略内容)、选择幻觉(用户以为搜索到了多种结果选择,其实那些媒体链接都控制在一家公司名下)、封闭资源(很多大型网站只做内链,而对于使用外链
2020年10月9日 17:27胡涂说
上周末将大卫的书整理了一下,发现都堆成一座小山了,若按单册算,估计比我到目前的藏书还多。这里总结下大卫这一两年来读过(或陪他阅读)的书,希望能对有同样需求的爸妈有参考帮助。另外,如果你有经验或阅读资源分享,欢迎留言交流。1

中文类

大卫一、二岁时读过的书基本都送人了,包括像巧虎系列、小熊宝宝、《小象帕欧》、乔比的生活故事、《大卫不可以》系列 等。现在的书基本上都是三岁后买的。

中文书除了卡梅拉,其他都是从当当上购买的,一般都是趁着打折季大肆采购屯着。

《斯凯瑞金色童书系列》

最早是在当当上买书凑单买了本《忙忙碌碌镇》,看上去画风乱七八糟的,没想到三岁多的大卫看的津津有味,索性我就把全套几个系列的《斯凯瑞金色童书》都买了。这套绘本风趣幽默,是个有意思的儿童的读物。

《神奇校车大家族》

这套书非常棒。这个春节因为疫情的关系,在家就陪着他读《神奇校车》,除了阅读版系列其他都读过一遍。这套全集中包含了几个系列:动画版、图画版、阅读版、桥梁书版。阅读版文字比较多,比较适合更大年龄的小朋友阅读;桥梁书版最适合小朋友独立阅读。《神奇校车》故事很有趣,也让他对科学产生了兴趣。大卫说他长大后想当科学家,问他为什么,他说“如果当了科学家,长大后我的小孩就可以说我有个科学家爸爸。”还说,“如果长大后当不了科学家,那就只能当爸爸了。”

《不一样的卡梅拉》

讲母鸡卡梅拉和她的儿女们卡梅利多、卡门的历险故事,有段时间睡前读给他听,还比较有意思。

《手不是用来打人的 儿童好品德系列》

有段时间大卫喜欢打人,就给他买了这套书。包括手不是用来打人的、嗓门不是用来嚷嚷的、语言不是用来伤人的、细菌不是用来分享的、尾巴不是用来扯的。即使不读,放在书架上也可以经常提醒小朋友。

《时代周刊精选少儿百科》

这套书感觉没什么意思,就是一些图片加描述,稍显枯燥。

《大英儿童漫画百科》

这套书还不错,天文、地理、科学、历史都有涵盖,以故事的形式描述。不过还不太适合大卫的年龄,更适合6岁的孩子。大卫对里面的内容还是蛮感兴趣的,不过因为文字太多,只能挑一些章节跟他一起看。

英文类

英文书除了一些在网上买的原版外,还有些是在淘宝上买的点读本(非正版)。主要是因为点读笔确实很方便,我们上班时他也可以在家点读。因为点读版非正版,这里就不给出购买链接了。

《廖彩杏系列》 (点读本)

廖彩杏系列其实不是一套出版书,而是廖彩杏为她子女选的英文
2020年10月9日 17:27胡涂说
最近,我和大卫几乎每天都会看一集 kurzgesagt 的视频。kurzgesagt 是一家德国的设计工作室,在 youtube 上发布科普视频,视频制作质量很高,目前已有一千万多订阅。kurzgesagt 英语意为 In a Nutshell, 即简而言之、概述的意思。前几天看到他们的 蛋 The Egg, 觉得挺有意思。1

《蛋》The Egg 的故事情节很短,主要是两个“人”的对话,一个是“你”,一个是“我”(上帝)。“你”在一次车祸中丧身,“我”带“你”离开现场,并告诉“你”要带“你”去转世,并且下一个轮回将是公元540年的一个中国姑娘。然后“我”再进一步解释:时间只存在“你”的世界里,在“我”的世界里则不同,那里有很多和“我”一样的存在。而这个世界是“我”为“你”创造的,只有“你”,所有人都是“你”,不同化身的“你”。“你”是林肯,也是刺杀他的约翰·布斯;“你”是希特勒,也是被他杀死的几百万人;“你”是耶稣,也是他的门徒。“你”每次伤害人,就是在伤害自己;“你”每次的善意行动,都是对自己的善意。“你”是“我”的同类,“我”的孩子。但“你”还是个胎儿,还在发育。等“你”活过所有的时间和所有人的生命之后,“你”才会足够成熟获得新生。而这个宇宙,就是孕育“你”的“蛋”。

故事很短,读下来又觉得意犹未尽,说它是科幻吧,好像又隐含了哲理,还有那么点宗教的色彩。时空穿越、多重宇宙、博爱、因果、轮回,每个人都可以有不同的理解方式。但读完之后,都要问那句人类终极的问题:“我是谁?”

这则故事的原文作者 Andy Weir 曾是一名程序员,在 AOL、暴雪等公司工作过。他最出名的科幻小说是《火星救援》,并被拍成电影。《蛋》The Egg 是 Andy Weir 最受欢迎的短篇小说,被翻译成多种文字(The Egg 原文, 中文翻译)。 2019年,也是《蛋》The Egg 发表十周年之际, kurzgesagt 将它拍成了短视频。

自从哈勃打开了人类的探索空间外,人类才发现地心说是多么可笑;在宇宙中连银河系也只不过是沧海一粟,更不用说太阳系里面这颗小小的蓝色星球了。以至于很多人怀疑这个宇宙的真实性,体现在很多的科幻小说或电影中,最有名的如《黑客帝国》。这种观点我更愿意叫它宇宙虚无主义。

kurzgesagt 的很多视频似乎都在探索这种虚无主义,例如 Is Reality Real? The Simulation
2020年10月7日 00:18Microsoft Security Response Ce
The Azure Sphere Security Research Challenge brought together 70 researchers from 21 countries to help secure Azure Sphere customers and expand Microsoft’s partnerships with the global IoT security research community. During the three-month Azure Sphere Security Research Challenge, researchers surfaced 20 Critical or Important severity security vulnerabilities, with Microsoft awarding $374,300 in bounty awards for …  Concluding the Azure Sphere Security Research Challenge, Microsoft Awards $374,300 to Global Security Research Community Read More »
2020年10月1日 23:52面向信仰编程
2020年9月28日 11:30王登科-DK博客
2020年9月27日 16:56tyler_download的专栏
本节我们看看X86指令集以及X86的硬件体系架构。在汇编语言中最常见的指令就是mov,他将数据从一个地方转移到指定位置,该指令能将数据转移到特定位置的内存或是给定寄存器。mov指令的格式为(mov 目的,源头),源头指的是要被挪到的数据,目的是数据被挪动的目的地,  我们看几个具体例子:
mov eax, ebx (把寄存器ebx中的数据拷贝到eax寄存器)
mov eax, 0x42 (把数值0x42赋值给eax寄存器)
mov eax, [0x4037c4](把地址为0x4037c4的4字节数据拷贝到e                    
                        作者:tyler_download 发表于 2020/09/27 16:36:37 原文链接 https://blog.csdn.net/tyler_download/article/details/108831037                    
                    
                        阅读:109
2020年9月27日 09:57一个安全研究员
嘿嘿嘿~                    
                        作者:he_and 发表于 2020/09/27 09:36:54 原文链接 https://blog.csdn.net/he_and/article/details/108821456                    
                    
                        阅读:125
2020年9月22日 09:09一个安全研究员
补充一点
作者:he_and 发表于 2020/09/22 08:49:45 原文链接 https://blog.csdn.net/he_and/article/details/108723542
阅读:816
2020年9月22日 06:44Microsoft Security Response Ce
We’re excited to announce a significant update to the Security Update Guide, our one-stop site for information about all security updates provided by Microsoft. This new version will provide a more intuitive user experience to help protect our customers regardless of what Microsoft products or services they use in their environment. We’ve listened to your feedback and incorporated many …  New and improved Security Update Guide! Read More »
2020年9月22日 01:08Microsoft Security Response Ce
At the Microsoft Security Response Center’s (MSRC), our primary mission is to help protect our customers. One of the ways we do this is by working with security researchers to discover security vulnerabilities in our services and products, and then making sure those that pose a threat to customers get fixed. Many researchers report these …  What to Expect When Reporting Vulnerabilities to Microsoft Read More »
2020年9月21日 10:03一个安全研究员
累
作者:he_and 发表于 2020/09/21 09:19:15 原文链接 https://blog.csdn.net/he_and/article/details/108684623
阅读:1182
2020年9月21日 09:42一个安全研究员
非技术,只是聊聊体悟
作者:he_and 发表于 2020/09/21 09:25:31 原文链接 https://blog.csdn.net/he_and/article/details/108702758
阅读:1542 评论:3 查看评论
2020年9月20日 02:10Swing'Blog 浮生若梦
CodeQL 背景
CodeQL 是一个白盒源代码审计工具。其开发公司 Semmle 也成功和 Github 联姻,成立了 Github Security Lab,负责 Github 上开源软件的代码安全审计。
网上关于该工具的安装教程见官方文档,顺便一说网上的教程也不少,这里就不赘述了。
CodeQL 使用
官方提供了 QL 语法的文档: https://help.semmle.com/QL/ql-handbook/ 以及 CodeQL 的一些 api 接口 https://help.semmle.com/qldoc/cpp/
关于CodeQL 使用,在这篇文章咱们以一个 Github Security Lab 公开的教程作为示例
CodeQL CTF 2: U-Boot
CTF 2: U-Boot Challenge - Follow in the footsteps of our security research team and discover 13 vulnerabilities un U-Boot. Language: C - Difficulty level:
0x01 查找特定函数的定义
CodeQL 使用的时候需要通过 import 关键词导入特定语言的解析库,例如这里使用的是 import cpp ,如果我要查询 strlen 的函数定义,我只需要编写如下代码
1
2
3
4
5
6

import cpp

from Function f
where f.getName() = "strlen"
select f, "a function named strlen"


右键点击运行,效果如下
其中第三个是关于 strlen 的定义,
0x2 查找特定宏定义
但是在 c 代码里, 有些情况我们需要查找宏的定义,这个时候就需要使用 Macro 这个 Predicates, 例如样例里提到的 ntohs 族,函数
另外, QL 语言支持正则匹配,我们可以通过 regexpMatch 匹配一类函数例如如下代码
1
2
3
4
5
6

import cpp

from Macro m
where m.getName().regexpMatch("ntoh(s|l|ll)")
select m


0x3 函数的调用
在代码审计的场景里,我们在查找函数定义的同时,也需要根据函数调用查找完整的数据
2020年9月19日 17:44面向信仰编程
2020年9月17日 10:44面向信仰编程
2020年9月16日 17:38关注的论坛
ShellCode在线免杀工具,只需要从cobaltstrike或msfvenom生成shellcode,填写到shellcode框内,根据需要选择一些参数,便可以在线生成免杀的可执行文件。 免杀编译生成使用的是go语言,所以文件可能比较大,使用upx压缩可以到500kb左右。 目前仅支持x64位的免杀。 使用教程以生成Windows可执行文件为例。 cobaltstrike 生成shellcode 生成后门 - Payload Generator ... 阅读全文>>
2020年9月15日 10:17tyler_download的专栏
掌握黑客技术一大难点就在于你要非常深入计算机技术的底层。绝大多数程序员只愿意在上层应用上花点时间,毕竟他们只想”混饭吃“,任何有志于不断提升技术能力的工程师都必须跨过几个高门槛,一个是算法,一个是系统设计,还有就是掌握计算机体系结构,与底层,与硬件打交道,这些知识点难度大,有些甚至很枯燥,因此愿意专研的人不多,我们本节所要描述的汇编语言就属于计算机体系结构的一部分。
一名真正的黑客,不是那些只会使用工具搞些歪门邪道的门外汉,掌握汇编语言在关键时刻使用反汇编技术进行分析不可避免。在这里我们对汇编语言做初步掌握                    
                        作者:tyler_download 发表于 2020/09/15 10:06:05 原文链接 https://blog.csdn.net/tyler_download/article/details/108594045                    
                    
                        阅读:120
2020年9月11日 09:34一个安全研究员
js中有很多东西呀
作者:he_and 发表于 2020/09/11 09:17:46 原文链接 https://blog.csdn.net/he_and/article/details/108527323
阅读:1262 评论:7 查看评论
2020年9月10日 20:40一个安全研究员
????
作者:he_and 发表于 2020/09/10 20:19:40 原文链接 https://blog.csdn.net/he_and/article/details/108522102
阅读:650
2020年9月10日 00:41回忆飘如雪
0x01 背景
在内存马横行的当下,蓝队or应急的师傅如何能快速判断哪些Filter/Servlet是内存马,分析内存马的行为功能是什么?最终又如何不重启的将其清除?红队师傅又如何抓铺其他师傅的内存马为自己用,亦或是把师傅的内存马踢掉?
在当下攻防对抗中,一直缺少着针对内存马扫描,捕捉与查杀的辅助脚本。下面就以Tomcat 8.5.47为例子,分享下编写方法,其他中间件万变不离其宗。
考虑到Agent技术针对红队来说比较重,我们这次使用jsp技术来解决以上问题。
0x02 扫描Filter和Servlet
要想扫描web应用内存中的Filter和Servlet,我们必须知道它们存储的位置。通过查看代码,我们知道StandardContext对象中维护的是一个
和Filter相关的是filterDefs和filterMaps两个属性。这两个属性分别维护着全局Filter的定义,以及Filter的映射关系。
和Servlet相关的是children和servletMappings两个属性。这两个属性分别维护这全家Servlet的定义,以及Servlet的映射关系。
其他request对象中就存储这StandardContext对象。
1
2
3
4
5
6
7

request.getSession().getServletContext() {ApplicationContextFacade}
-> context {ApplicationContext}
-> context {StandardContext}
* filterDefs
* filterMaps
* children
* servletMappings

所以我们只需要通过反射遍历request,最终就可以拿到Filter和Servlet的如下信息。
Filter/Servlet名
匹配路径
Class名
ClassLoader
Class文件存储路径。
内存中Class字节码(方便反编译审计其是否存在恶意代码)
该Class是否有对应的磁盘文件(判断内存马的重要指标)
具体反射遍历代码放文末github,这里值得一提是拿到Class名通过如下方法就能拿到其被加载到内存中的字节码内容。
1

byte[] classBytes = Repository.lookupClass(Class.forName("me.gv7.Memshell")).g
2020年9月8日 01:04面向信仰编程
2020年9月7日 13:50关注的论坛
[该文章已设置加密]
2020年9月5日 11:04tyler_download的专栏
要想实现ELF文件的入口劫持,不深入掌握其运行原理与组成结构那是不可能的。ELF的内部结构复杂,加载逻辑难以理解,因此我们需要通过切香肠的方式,将这个困难的技术点一点一滴的去攻克。
这一节我们先掌握如何读取头部信息和程序表头,我们先看ELF文件的大致结构:

ELF文件格式最重要的就是所谓的段,特别是其中的代码段和数据段。对应上图就是.text,.data两个段。每个段都对应一个段表来描述,而若干隔断会组成一个整体,它对应一个program,而后者则由program header table来指向,讲解EL                    
                        作者:tyler_download 发表于 2020/09/05 10:51:04 原文链接 https://blog.csdn.net/tyler_download/article/details/108416709                    
                    
                        阅读:345
2020年9月2日 22:32关注的论坛
在渗透测试信息中我们可能需要尽可能收集域名来确定资产边界。 在写自动化渗透工具的时候苦与没有好用的子域名爆破工具,于是自己就写了一个。 Ksubdomain是一个域名爆破/验证工具,它使用Go编写,支持在Windows/Linux/Mac上运行,在Mac和Windows上最大发包速度在30w/s,linux上为160w/s的速度。 总的来说,ksubdomain能爆破/验证域名,并且快和准确。 阅读全文>>
2020年9月2日 09:11一个安全研究员
新姿势get~
作者:he_and 发表于 2020/09/02 09:00:31 原文链接 https://blog.csdn.net/he_and/article/details/108355229
阅读:1322
2020年9月1日 09:06一个安全研究员
用了都说好
作者:he_and 发表于 2020/09/01 08:44:06 原文链接 https://blog.csdn.net/he_and/article/details/108333604
阅读:3775 评论:2 查看评论
2020年8月27日 22:01PHITHON BLOG
本文2020年8月24日发表于代码审计公众号
周日晚,某群里突然发布了一则消息,宝塔面板的phpmyadmin存在未授权访问漏洞的紧急漏洞预警,并给出了一大批存在漏洞的URL:
随便点开其中一个,赫然就是一个大大的phpmyadmin后台管理页面,无需任何认证与登录。当然,随后各种神图神事也都刷爆了社交网络,作为一个冷静安全研究者,我对此当然是一笑置之,但是这个漏洞的原因我还是颇感兴趣的,所
2020年8月25日 19:12tyler_download的专栏
重定向是计算机技术中非常底层的概念和操作。它指的是将程序中涉及到的变量名与变量在计算机内存中的位置关联起来。当在代码中执行类似x=1;的语句时,编译器需要通过重定向信息找到变量x对应的内存位置,然后将数值1写入该内存,因此重定向既跟程序的加载链接有关,又于编译原理有关,因此对计算机体系结构不了解,或只关注上层应用开发,对底层技术理解不多的同学对它进行掌握就会有些困难。
为了准确将变量对应到具体的内存位置,就必须要有相关信息来描述变量名与内存之间的关系,这些信息就叫重定向记录(relocation recor                    
                        作者:tyler_download 发表于 2020/08/25 18:52:21 原文链接 https://blog.csdn.net/tyler_download/article/details/108227133                    
                    
                        阅读:194
2020年8月24日 09:14一个安全研究员
最近一直在挖CORS配置错误这个问题,但是还没找到像样的案例,就先归纳一下这个漏洞,顺便记录一下学到的新姿势,希望对大家有所帮助
在阅读本文之前,你应该已经知道什么是CORS了,以及CORS配置错误会带来的安全问题,当然不懂也没关系,我用几句话简单给大家描述下这个问题。
CORS基础
CORS的全称是跨域资源访问,我们都知道同源策略(SOP)限制了我们的浏览器跨域读取资源,但是我们在设计开发一些网站的时候,本来就需要跨域读取数据,但是因为有同源策略的存在,我们要跨域就太麻烦了,所以cors应运而生,这个策.                    
                        作者:he_and 发表于 2020/08/24 08:58:04 原文链接 https://blog.csdn.net/he_and/article/details/108192621                    
                    
                        阅读:688 评论:2 查看评论
2020年8月19日 00:03王登科-DK博客
当我在自贡市五星街尽头的菜市场花 80 元给王茶水赎身的时候,它还是一只卷缩在这座四川四线小城的菜市场的锈铁笼子里的一只小奶猫,而我则是一名踌躇满志的大三学生。



我又花了 5 元,买了一个粉红色的小笼子,这个笼子小到不像是关猫的,更像是关老鼠的,但对那个时候的王茶水来说,已经非常宽敞了,我提着这个小笼子,离开了那个污水横流,气味难闻的市场,再也没有回去过。

然后四年半过去了。

和大三时候相比,现在的我大概胖了15斤,很巧的是,王茶水也差不多重了15斤,对于一只猫来说,在体重增长上能够和我相比,这很不容易。



根据最广为流传的,关于猫的年龄的说法,猫的一岁相当于人的 7 岁,那么王茶水现在已经到了相当于人的而立之年,是一只不折不扣的中年猫了。

中年茶水猫,和小时候相比,安静了很多,虽然在某些时候会突然抽风像一匹野马一样哒哒哒的狂奔绕两圈,但大多数时候,它只是找个柔软舒适的地方,静静的卧着,时不时伸个懒腰,偷瞄人类,思考猫生。



实话实说,我其实也经常看着王茶水思考,它到底在想什么呢?它快乐吗?它无聊吗?它怎么看待我,又怎么看待自己?

人在衣食无忧后拼命追寻的东西,虚荣,财富,活着的意义,生命的价值,这些在猫身上似乎都失灵了,一旦一只猫开始衣食无忧的生活,那它就再也不会努力了。



许多人表示,如果自己衣食无忧,那么自己也不会再努力,一天到晚躺着就行了,即便确实如他们所说,但大部分时候人类所指的衣食无忧其实是指一二线城市的全款购入的大房子以及至少小一千万的存款,我认为这不能和猫的衣食无忧相比,因为猫不仅不需要大房子,存款,它甚至还不需要衣服。



论不努力,还没有人能比得过猫,我多少有一点认为,这是许多人喜欢猫的原因,因为猫做到了人们做不到的事情:只要有一口饭吃,就绝不再努力,这一点不仅人输了,狗也输了。

我不能苦口婆心的劝说王茶水活得更有意义一些,多做一些对社会有益的事情,去实现自己的价值,我这么做的话会显得很滑稽,猫和人都无法理解,所以从某种角度来说人对生命赋予的意义仿佛只是局限于人类自己而已,从更广阔的生命上看,赋予意义这件事好像是最没意义的。



王茶水和我相处了 4 年了,它从来不让我失望,从来不会给我带来超过15斤的压力(它完全卧在我肚皮上的话就会给我带来15斤的压力),也从来不欺骗我,更不会害我(这个词用在猫上甚至有一种别样的趣味感),我们始终保持良好的友谊,几乎比任何人类
2020年8月18日 00:56Microsoft Security Response Ce
As part of our ongoing efforts towards safer systems programming, we’re pleased to announce that Windows Control Flow Guard (CFG) support is now available in the Clang C/C++ compiler and Rust. What is Control Flow Guard? CFG is a platform security technology designed to enforce control flow integrity. It has been available since Windows 8.1 …  Control Flow Guard for Clang/LLVM and Rust Read More »
2020年8月17日 00:24tyler_download的专栏
一句话总结人工智能技术那就是:道可道,非常道。第一个“道”指的是世界存在客观规律;第二个“道”指的是这些规律可以被人类识别,掌握;第三个“道”指的是认知方法,而“非常道”指的是特殊的不同...                    
                        作者:tyler_download 发表于 2020/08/16 11:49:59 原文链接 https://blog.csdn.net/tyler_download/article/details/108047246                    
                    
                        阅读:92
2020年8月16日 03:02回忆飘如雪
想法早在几个月之前就有了,月初收好友之邀请,夜游鼓浪屿,彼时夜朗星稀,山海一色,偶有微波抚足,不觉间有了点写东西的感觉,晚上回到旅社简单写了下。等回到北京后,不料润色之意全无,就凑合看吧。
0x01 内存马简历史
其实内存马由来已久,早在17年n1nty师傅的《Tomcat源码调试笔记-看不见的shell》中已初见端倪,但一直不温不火。后经过rebeyong师傅使用agent技术加持后,拓展了内存马的使用场景,然终停留在奇技淫巧上。在各类hw洗礼之后,文件shell明显气数已尽。内存马以救命稻草的身份重回大众视野。特别是今年在shiro的回显研究之后,引发了无数安全研究员对内存webshell的研究,其中涌现出了LandGrey师傅构造的Spring controller内存马。至此内存马开枝散叶发展出了三大类型:
servlet-api类
filter型
servlet型
spring类
拦截器
controller型
Java Instrumentation类
agent型
内存马这坛深巷佳酒,一时间流行于市井与弄堂之间。上至安全研究员下至普通客户,人尽皆知。正值hw来临之际,不难推测届时必将是内存马横行天下之日。而各大安全厂商却迟迟未见动静。所谓表面风平浪静,实则暗流涌动。或许一场内存马的围剿计划正慢慢展开。作为攻击方向的研究人员,没有对手就制造对手,攻防互换才能提升内存马技术的发展。
0x02 查杀思路
我们判断逻辑很朴实,利用Java Agent技术遍历所有已经加载到内存中的class。先判断是否是内存马,是则进入内存查杀。
1
2
3
4
5
6
7
8
9
10
11
12

public class Transformer implements ClassFileTransformer {
public byte[] transform(ClassLoader classLoader, String s, Class<?> aClass, ProtectionDomain protectionDomain, byte[] bytes) throws IllegalClassFormatException {
// 识别内存马
if(isMemshell(aClass,bytes)){
// 查杀内存马
byte[] newClassByte = killMemshell(aClass,bytes)