normal系列
normal17

有个upx壳
upx -d 脱壳
进入start函数

此处的CreateMutexW为创建新的互斥体,全局变量 ::hObject获取互斥对象返回的句柄以便调用
此处创建互斥对象的作用就在于防止下面的双线程引起资源冲突,防止数据损坏。
CreateMutexA 函数 (synchapi.h) - Win32 apps |微软文档 (microsoft.com)
进入startaddress

加密方式不繁琐,小写给替换成string中的大写,大写反之。
从第29位开始。这玩意循环30次,但是密码长度只有29,应该是要加东西。

关键在于两个线程的WaitForSingleObject这个函数
WaitForSingleObject function (synchapi.h) - Win32 apps |微软文档 (microsoft.com)
startsaddre是最先开启的线程,而WaitForSingleObject则会让他在sleep 的时候挂起,使其进入等待状态,而ReleaseMutex空出使用权限给其他线程。
从而执行第二个线程的指针递减,等第二个线程sleep了又会空出使用权限,互斥体权限交给第一个线程执行加密
也就是奇数加密偶数不加密
写个脚本
1 | data='TOiZiZtOrYaToUwPnToBsOaOapsyS' |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 kiki的博客!
