七
Two useful IDA Python scripts
Written by KiSSinGGer on 七月 28th, 2010
Useful when you’re confuse about reversing Windows executables using COM.
ClassAndInterfaceToNames.zip
VtablesStructuresFromPSDK2003R2.zip
欢迎你丫来到 KiSSinGGer的私处
在这个充满G点的国度里,我这儿,没有敏感的东西.
Written by KiSSinGGer on 七月 28th, 2010
Useful when you’re confuse about reversing Windows executables using COM.
ClassAndInterfaceToNames.zip
VtablesStructuresFromPSDK2003R2.zip
Written by KiSSinGGer on 七月 15th, 2010
某次和牛大哥谈到这个问题. VC6之后,在Visual Studio里面以/MD(Multithread DLL)的方式编译的程序会动态链接到msvcr70.dll, msvcr80.dll, msvcr90.dll…这些新的C Runtime Library上面.而我又不想通过Microsoft Visual C++ Redistributable Package的方式让用户去安装.我只想共享我的一个小程序, 怎么办呢? 我用C库仅仅是使用了一些通常的C函数而已, 没有使用一些新奇的特性, 为此要静态链接的话, 本来一个7K的文件变成了60K…看起来不爽.
Visual Studio显然不想提供一个链接到旧CRT库的方法.网上搜了一下, 利用WDK/DDK带的CRT lib进行动态链接, 是一个办法.
我装的是WDK7.0.0, 以此为例说一下配置方法:
1.看看WDK安装位置.我是D:\WinDDK\7600.16385.0
头文件所在文件夹
D:\WINDDK\7600.16385.0\inc\crt
│ assert.h
│ conio.h
│ ctype.h
│ fcntl.h
│ limits.h
│ locale.h
│ malloc.h
│ math.h
…..
│ stdarg.h
│ stddef.h
│ stdexcpt.h
│ stdio.h
│ stdiostr.h
│ stdlib.h
库文件所在文件夹(x86)
D:\WINDDK\7600.16385.0\LIB\CRT\I386
delayimp.lib
libcimt.lib
libcimtd.lib
libcmt.lib
libcmtd.lib
libcpmt.lib
libcpmtd.lib
msvcirt.lib
msvcirtd.lib
msvcprt.lib
msvcprtd.lib
msvcprt_btowc.lib
msvcrt.lib
msvcrtd.lib
safecrtnt.lib
thrownew.obj
2.在VS的编译选项里面做如下更改:
[1] Configurations Properties –> C\C++ –> General –> Additional Include Directories
添加: D:\WinDDK\7600.16385.0\inc\crt[2] Configurations Properties –> Linker–> General –> Additional Library Directories
添加: D:\WinDDK\7600.16385.0\lib\Crt\i386[3] Configurations Properties –> Linker–> Input –> Additional Dependencies
添加: msvcrt.lib[4] Configurations Properties –> Linker–> Input –> Ignore All Default Libraries
设为: Yes(/NODEFAULTLIB)
其他版本VS/DDK依次类推.
Written by KiSSinGGer on 四月 12th, 2010
http://www.harmonysecurity.com/
视察一段时间,准备加入链接.
Written by KiSSinGGer on 一月 27th, 2010
转自 Xiaoxiao’s Blog
http://home.xxsyzx.com/2197.html
之前以为linux和windows下的socket都是符合posix标准的,在一个环境下能够正常使用在另外一个环境也没问题。但没想到两者还是有那么多不同。
1.最先发现的是在windows上需要调用那个WSAStartup进行初始化才能使用socket。
2.linux下关闭socket用close,而windows上用closesocket。
3.后来发现shutdown的参数名称不同,windows上用SD_BOTH,linux上是SHUT_RDWR。
4.在linux下如果不正常关闭socket会触发SIGPIPE异常,所以我使用signal( SIGPIPE, SIG_IGN );忽略之。
5.linux下可以使用read,write函数操作socket,也可以使用send,recv。windows上只能使用send,recv?(不考虑udp的sendfrom和recvfrom)
今天又发现一个很大的不同点了,造成了homeserver在短时间内生成了一个20GB的日志文件,用完了vps的硬盘空间。如果一个正在使用中的socket使用close来关闭之而不调用shutdown,则该socket还是处于连接中,只是在进程的文件描述符中移除了(right?)所以导致了使用那个socket的线程一直没有收到关闭信号,阻塞在socket的recv上无法被关闭。而在windows上调用closesocket就彻底地断开了连接了。
下面是网上提供的信息:
close—–关闭本进程的socket id,但链接还是开着的,用这个socket id的其它进程还能用这个链接,能读或写这个socket id
shutdown–则破坏了socket 链接,读的时候可能侦探到EOF结束符,写的时候可能会收到一个SIGPIPE信号,这个信号可能直到socket buffer被填充了才收到,shutdown还有一个关闭方式的参数,0 不能再读,1不能再写,2 读写都不能。
所以,以后关闭socket还是同时使用shutdown和close好。
Written by KiSSinGGer on 一月 5th, 2010
一般来说,Posix的线程终止有两种情况:正常终止和非正常终止。线程主动调用pthread_exit()或者从线程函数中return都将使线程正常退出,这是可预见的退出方式;非正常终止是线程在其他线程的干预下,或者由于自身运行出错(比如访问非法地址)而退出,这种退出方式是不可预见的。
![]()
不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因运行出错而退出的前提下,如何保证线程终止时能顺利的释放掉自己所占用的资源,特别是锁资源,就是一个必须考虑解决的问题。
最经常出现的情形是资源独占锁的使用:线程为了访问临界资源而为其加上锁,但在访问过程中被外界取消,如果线程处于响应取消状态,且采用异步方式响应,或者在打开独占锁以前的运行路径上存在取消点,则该临界资源将永远处于锁定状态得不到释放。外界取消操作是不可预见的,因此的确需要一个机制来简化用于资源释放的编程。
在POSIX线程API中提供了一个pthread_cleanup_push()/pthread_cleanup_pop()函数对用于自动释放资源–从pthread_cleanup_push()的调用点到pthread_cleanup_pop()之间的程序段中的终止动作(包括调用pthread_exit()和取消点终止)都将执行pthread_cleanup_push()所指定的清理函数。API定义如下:
void pthread_cleanup_push(void (*routine) (void *), void *arg) void pthread_cleanup_pop(int execute)
pthread_cleanup_push()/pthread_cleanup_pop()采用先入后出的栈结构管理,void routine(void *arg)函数在调用pthread_cleanup_push()时压入清理函数栈,多次对pthread_cleanup_push()的调用将在清理函数栈中形成一个函数链,在执行该函数链时按照压栈的相反顺序弹出。execute参数表示执行到pthread_cleanup_pop()时是否在弹出清理函数的同时执行该函数,为0表示不执行,非0为执行;这个参数并不影响异常终止时清理函数的执行。
pthread_cleanup_push()/pthread_cleanup_pop()是以宏方式实现的,这是pthread.h中的宏定义:
#define pthread_cleanup_push(routine,arg) \
{ struct _pthread_cleanup_buffer _buffer; \
_pthread_cleanup_push (&_buffer, (routine), (arg));
#define pthread_cleanup_pop(execute) \
_pthread_cleanup_pop (&_buffer, (execute)); }
可见,pthread_cleanup_push()带有一个"{",而pthread_cleanup_pop()带有一个"}",因此这两个函数必须成对出现,且必须位于程序的同一级别的代码段中才能通过编译。在下面的例子里,当线程在"do some work"中终止时,将主动调用pthread_mutex_unlock(mut),以完成解锁动作。
pthread_cleanup_push(pthread_mutex_unlock, (void *) &mut); pthread_mutex_lock(&mut); /* do some work */ pthread_mutex_unlock(&mut); pthread_cleanup_pop(0);
必须要注意的是,如果线程处于PTHREAD_CANCEL_ASYNCHRONOUS状态,上述代码段就有可能出错,因为CANCEL事件有可能在pthread_cleanup_push()和pthread_mutex_lock()之间发生,或者在pthread_mutex_unlock()和pthread_cleanup_pop()之间发生,从而导致清理函数unlock一个并没有加锁的mutex变量,造成错误。因此,在使用清理函数的时候,都应该暂时设置成PTHREAD_CANCEL_DEFERRED模式。为此,POSIX的Linux实现中还提供了一对不保证可移植的pthread_cleanup_push_defer_np()/pthread_cleanup_pop_defer_np()扩展函数,功能与以下代码段相当:
{ int oldtype;
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype);
pthread_cleanup_push(routine, arg);
...
pthread_cleanup_pop(execute);
pthread_setcanceltype(oldtype, NULL);
}
![]()
![]()
一般情况下,进程中各个线程的运行都是相互独立的,线程的终止并不会通知,也不会影响其他线程,终止的线程所占用的资源也并不会随着线程的终止而得到释放。正如进程之间可以用wait()系统调用来同步终止并释放资源一样,线程之间也有类似机制,那就是pthread_join()函数。
void pthread_exit(void *retval) int pthread_join(pthread_t th, void **thread_return) int pthread_detach(pthread_t th)
pthread_join()的调用者将挂起并等待th线程终止,retval是pthread_exit()调用者线程(线程ID为th)的返回值,如果thread_return不为NULL,则*thread_return=retval。需要注意的是一个线程仅允许唯一的一个线程使用pthread_join()等待它的终止,并且被等待的线程应该处于可join状态,即非DETACHED状态。
如果进程中的某个线程执行了pthread_detach(th),则th线程将处于DETACHED状态,这使得th线程在结束运行时自行释放所占用的内存资源,同时也无法由pthread_join()同步,pthread_detach()执行之后,对th请求pthread_join()将返回错误。
一个可join的线程所占用的内存仅当有线程对其执行了pthread_join()后才会释放,因此为了避免内存泄漏,所有线程的终止,要么已设为DETACHED,要么就需要使用pthread_join()来回收。
![]()
![]()
理论上说,pthread_exit()和线程宿体函数退出的功能是相同的,函数结束时会在内部自动调用pthread_exit()来清理线程相关的资源。但实际上二者由于编译器的处理有很大的不同。
在进程主函数(main())中调用pthread_exit(),只会使主函数所在的线程(可以说是进程的主线程)退出;而如果是return,编译器将使其调用进程退出的代码(如_exit()),从而导致进程及其所有线程结束运行。
其次,在线程宿主函数中主动调用return,如果return语句包含在pthread_cleanup_push()/pthread_cleanup_pop()对中,则不会引起清理函数的执行,反而会导致segment fault。
Written by KiSSinGGer on 九月 17th, 2009
你们看,并不是只有我们国家才监视即时通讯工具.所以,心态要平和.
http://www.megapanzer.com/source-code/
As reported by Techworld in October 2006, Ruben Unteregger’s ex-employer, ERA IT Solutions, tasked him with writing a ‘white’ Trojan capable of intercepting, recording and uploading Skype and other VoIP calls – software subsequently used by the Swiss Department of the Environment, Transport, Energy and Communications (UVEK).