netcat for windows

用公司的新电脑调试一个远程的exploit,需要用到nc (netcat)。以前每次都是随便上网搜索一个版本,这次打算亲自编译一下。不过原始的代码仅考虑了Linux环境,windows没办法直接产生exe,首先想到的是使用cygwin来解决这个矛盾。但安装了包含gcc,make的环境的cygwin以后,编译仍旧失败,提示是某个源码用到的结构体缺东西。后来发现在讨论区有人给出了patch修正这个问题,修复后只要

./configure && make

netcat.exe就在源码的src目录产生了。缺点是这个netcat.exe需要cygwin三个动态链接库的支持(cygiconv-2.dll + cygintl-8.dll + cygwin1.dll),所以编译好的netcat如果需要使用就得背着这仨dll。另外一个option是找一个被人修改过,专用于windows的netcat。Rootsecure的源码直接放在VC 6.0新建的工程下面就可以编译,但需要在主文件增加

#pragma comment(lib,”ws2_32.lib”)

否则编译失败

附件里面是两种方案的源代码和编译好的可执行文件

反编译doswf加密的Flash

使用诸如Sothink SWF Decompiler等软件可以很容易反编译不加保护的Flash程序。如果Flash内使用了秘密的网络通信或引入了一段漏洞利用代码,编写者不会希望自己的劳动成果被轻易获取的。

doswf用于给Flash程序加壳,混淆变量、函数和类名,增加逆向的难度。最近拿到了一份使用Flash编写的exploit,想要分析当中触发代码,但Flash已经使用doswf做了处理,直接反编译查看代码行不通。

根据近一段时间的分析,doswf在加密Flash时做了以下三个工作:

  1. 在原始的Flash程序中加入花指令,混淆变量函数类名
  2. 使用ByteArray的压缩算法压缩原始Flash,并针对压缩后数组做逐字节的加密处理,并将加密后的ByteArray附到doswf生成的一个Flash程序中,doswf的Flash程序会动态解码释放原始Flash
  3. 在doswf生成的Flash程序中加入花指令,混淆变量函数类名

花指令主要用于对抗反编译引擎。

Flash中的ActionScript源码被编译成字节码,类似于C语言代码被编译成机器码。对于C语言编写的可执行程序,由于汇编指令长度可变,通过在机器码中加入花指令(je jne 的组合等)可以造成反汇编引擎错误的解释机器码。

对于Flash编译的字节码,由于指令长度固定为一个字节,无法通过加入花指令实现字节码级别的解析错误,但反编译引擎在尝试将包含花指令的字节码转化为ActionScript源码时会发生错乱,导致Sothink SWF Decompiler无法正常工作(程序停止响应)。

混淆变量函数和类型名是一种不可逆的过程doswf直接修改了Flash的常数表,用一些特殊符号替代用户自定义的名称。不过名称的混淆对分析代码影响有限,毕竟ActionScript的运行时类、成员函数和成员变量的调用仍然保持了原有名字。

压缩与加密Flash虽然很靠静态处理很棘手但考虑到Flash最后一定会被动态解码加载到内存中,处理它可以靠动态内存抓取。

综合上述的特性,下面通过实际的例子说明如何得到原始Flash的反编译结果。

其实整个问题的关键就是针对1和3中提到的花指令的去除,而且对于3和2,除非你对doswf的加解密算法感兴趣,不然使用动态抓取就很容易绕过了。

我使用debug版的flashplayer加载执行目标Flash程序,相比使用浏览器,干扰更少,内存更小,抓取速度和准确度都会快很多。在内存中搜索FWS和CWS(Flash的文件头部的magic word)字样可以找到疑似的Flash程序,根据Flash文件格式中标识长度的字段能够从内存中将它直接Dump出来。实现类似功能的有很多类似软件,比如SwfReader.jar。Dump结果可能有二三十个,文件过小过大都能迅速排除,再使用swfretools格式解析器观察每个SWF文件,如果解析正确,并且包含DoABC(Flash程序的代码段),则予以保留。

通过动态抓取可以得到加花后的原始Flash程序。我分析的这个由doswf处理的Flash程序并没有使用过于复杂多样的加花指令,仅是

原始代码A

原始代码B

转化为

原始代码A

jmp [OFFSET]

一些奇怪的字节码

label: [OFFSET]

原始代码B

每隔几十行字节码就会出现一次这种插入,也正是它们导致Sothink Decompiler崩溃。

去掉它们的算法也很基本,对代码段中的所有ActionScript方法进行扫描,将原始代码A和B之间的字节码全部使用空指令代替(0x02)。我写了个一个Python脚本完成这个工作,使用时需要修改Python代码中的两个偏移值,指向method_bodies的开始和结尾。

处理后的Flash文件就可以用Sothink反编译了。上述方法不见得universal,也许只是我遇到的一个特殊情况,doswf如果引入多种花指令,去花更为繁琐。或者新版本的Sothink如果已经更为强大,能够自行避开花指令,分析Flash也就不需要这么折腾了。

Android内核源码下载

今天下午抽了会儿疯把电脑清理了一遍,删掉了之前的android源码和内核源码。不过事后想想,万一想编译个驱动啥的还是得用,就又切到linux下面开始下载android内核源码(tegra)。

下载的教程按照官方的走就行,

git clone https://android.googlesource.com/kernel/tegra.git

可惜速度是要多慢有多慢,估计又是伟大的GFW在作祟,还好教育网内有些不是特敏感的内容用ipv6都能很好的绕过。

做法就是找到android.googlesource.com的ipv6地址,添加到/etc/hosts,然后用Network manger关闭ipv4出口,仅保留ipv6就可以高速免流量的下载源码了。

具体操作如下:

windows cmd下输入:

nslookup -qt=aaaa android.googlesource.com 2001:470:20::2

-qt用于指定查询类型(a,mx,ns…)

2001:470:20::2 是一个公益组织的dns服务器,仅返回被查域名的ipv6地址

比如我查询结果:2404:6800:4005:c00::52

切回linux,添加到/etc/hosts

2404:6800:4005:c00::52 android.googlesource.com

以此类推,将cache.pack.google.com,www.googlesource.com也添加到hosts中

然后使用Network manager关闭ipv4通道

再git clone就能以4-5M的速度下载内核源码了~ enjoy

Android kernel编译与刷机

RT3070的驱动在交叉编译时发现过程十分纠结,且网上说法不一,但辗转反侧折腾中发现了新的契机。原来Nexus 7的3.1.10内核本身就支持Ralink RT3070,只需要开启后编译产生新内核刷入Nexus 7就可以了,至于能不能让网卡支持混杂模式还有待测试。
编译内核比编译Android本身还容易,源码量小,对系统要求也比较低。参考[这里]下载编译内核有关代码
接下来为了编译内核,需要从Nexus 7下面把/proc/config.gz拽回来,并且解压得到.config放到kernel代码的根目录
cat config.gz | gunzip >.config
直接用git下载回来的Nexus 内核源码里面只有一个.git文件夹,需要使用git checkout才能将特定版本的源码解包释放。版本的选择可以参考下设备上的内核版本标注。比如我的为3.1.10-g009b6d1,就可以使用
git checkout 009b6d1
 
来释放对应版本的内核代码。然后 make menuconfig 可以调整内核模块,开启上述模块
make ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig 
 
Networking support –> Wireless
[*] Generic IEEE 802.11 Networking Stack (mac80211) 
// 只有开启这个选项才能看到RT3070的驱动模块
device drivers –>
network device support ->
wireless lan –>
ralink driver support
 
最后make一下就产生了zImage在arch/arm/boot/下面
接下来需要把这个zImage打包成boot.img然后刷入Nexus 7中
打包方法可以参看[这里] ,所需的解压包工具从[这里]下载
 
我的做法是用Nexus 7 toolkit把系统的boot.img提取,然后用unpackbootimg解包,然后把我的zImage和ramdisk重新打包成成boot.img,就能够刷入系统了。刷入的方法就是用
fastboot flash boot boot.img
 
推荐在做一切前hack工作前,用Nexus-7-toolkit先备份好,fastboot,adb这类工具toolkit里面也提供了

Jelly Bean 编译

由于需要移植RT3070的驱动到Nexus 7,因此Android的源码是必须要有的。为了保证源码的正确性,就先把Android编译出来练练手吧。主要过程看[这里]

我是在LiveUSB模式的Backtrack 5 r3 (ubuntu 10.0.4) 下面进行的代码下载和编译,代码都放在了mount过来的Windows分区(NTFS)下面。

整体思路和参考链接相同,但由于是在mount过来的分区上搞,所以PATH环境变量的设置要有所区别。

再来就是需要sun-java6-jdk安装到位,具体方法:

###############

gedit /ect/apt/sources.list 

添加一行: deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse

apt-get update

apt-get install sun-java6-jdk 

############### 

另一点就是repo工具的下载,在不同城市测试了一下,原文链接已经被墙了。如果是教育网用ipv6就能绕过这个微墙。否则就在windows下先用代理下载好。repo实际上就是一段python代码。

使用repo下载全部JellyBean过程特别慢,花了有两三天吧,经常有错误产生,可能是dns导致的。如果你也遇到可以考虑修改host文件:

#########

gedit /etc/hosts

然后把 android.googlesource.com 和 googlesource.com 先用 nslookup 查好ip地址添加进来。

#########

这样可以减少代码下载中的DNS请求数量

至于编译的话只要按照参考链接的步骤来就没什么问题。虽然在这个过程中遇到了很多错误,但后来发现归根结底都是系统配置不够导致的。下面几点是容易被忽略的, 但却是编译过程所必须的~

需要64位的主机配64位的操作系统来进行编译

增加swap分区,Backtrack 默认不带,增加方法:

mount 一个windows分区过来,最好和代码存放的分区不同,然后增加一个swap文件就可以了比如windows分区mount到了/media/D

##########

dd if=/dev/zero of=/media/D/swapfile bs=1024 count=4096k   #这样就增加了一个4G的swap文件

mkswap /media/D/swapfile #格式化这个文件

swapon /media/D/swapfile #开启swap

swapon -S #用于查看swap是否已经被正确开启

##########

我的电脑是intel i7 8核的,内存4G 但为了保证编译过程中不至于卡死,使用了 make -j4 命令进行编译 (只用4个核免得系统太忙碌),如此这般,system.img就会被编译出来了

NFC Day One

最近大采购啊,买了Nexus 7,OTG线,ACR122U,两张M1卡,一张特种卡

目标:

  • Nexus 7+OTG+RT3070 跑 airodump,需要交叉编译驱动,需要在手机上构建debian或ubuntu环境
  • Nexus 7+NFC实现Mifare卡读取和写入,已经使用NFC_WAR和Mifare Scanner初步实现 
  • Backtrack+libnfc+nfc-tools (或RadioWar liveCD) 实现RFID卡口令获取,并结合Nexus 7和特种卡实现卡复制

这两天尝试了 Backtrack 下使用MFOC获取RFID卡口令和数据,环境搭建和相关驱动安装在Backtrack Wiki 有参考,但实际过程有些小细节还需要一波三四折了一下

整体过程可以参考[HERE]


apt-get install flex libpcsclite-dev libusb-dev checkinstall
cd ~
wget http://www.acs.com.hk/drivers/eng/ ACR122U_driver_Lnx_Mac10.5_10.6_1.02_P.zip
unzip -d acr122u ACR122U_driver_Lnx_Mac10.5_10.6_1.02_P.zip
cd acr122u
tar -jxvf acsccid-1.0.2.tar.bz2
cd acsccid-1.0.2
./configure
make
checkinstall -D -y –install
cd ~
apt-get install -y debhelper libtool && wget http://libnfc.googlecode.com/files/libnfc-1.4.2.tar.gz
tar xfvz libnfc-1.4.2.tar.gz &&cd libnfc-1.4.2
svn checkout http://libnfc.googlecode.com/svn/tags/libnfc-1.4.2/debian
dpkg-buildpackage -rfakeroot
dpkg -i ../libnfc*.deb
cd ~
wget http://nfc-tools.googlecode.com/files/mfoc-0.10.2.tar.gz && tar -xvzf mfoc-0.10.2.tar.gz
cd mfoc-0.10.2
autoreconf -vis
./configure
make
checkinstall -D -y –install


在第二步之后(第二个cd~后面)libnfc装好了,就可以使用nfc-list查看设备信息了,但执行后居然是 

root@bt:~/libnfc-1.4.2# nfc-list
nfc-list use libnfc 1.4.2 (r891)
No NFC device found.

这不是说没识别我的ACR122U吗~果然读卡器灯也不亮,归根结底是因为pcscd没有运行,虽然这是个啥现在还没搞清楚,但看来应该是某种硬件驱动层的wrapper。另开一个窗口执行pcscd -f 再回来执行nfc-list

root@bt:~/libnfc-1.4.2# nfc-list
nfc-list use libnfc 1.4.2 (r891)
nfc-list: ERROR: No ACR122 firmware received, Error: 80100016
nfc-list: ERROR: Unable to connect to NFC device.

看来还是不太正常,深思熟虑过后,原来是还没有放卡片,再来nfc-list

root@bt:~/libnfc-1.4.2# nfc-list
nfc-list use libnfc 1.4.2 (r891)
Connected to NFC device: ACS ACR122U 00 00 / ACR122U210 – PN532 v1.6 (0x07)
1 ISO14443A passive target(s) was found:
ATQA (SENS_RES): 00  04 
UID (NFCID1): fe  05  0f  0f 
SAK (SEL_RES): 08 

总算出结果了,然后完成第三步安装好mfoc等nfc-tools套件

执行mfoc,却出现如下信息

root@bt:~/mfoc-0.10.2# mfoc -O dump
nfc_initiator_select_passive_target: Success

查了半天,好像是libnfc的bug,Backtrack Wiki里面提到的libnfc-1.4.2已经不是最新版本了,至少1.5.0已经出来了,所以重启后(Live CD模式),重新执行上述命令,但把第二步的所有1.4.2换成1.5.0,


cd ~
apt-get install -y debhelper libtool && wget
http://libnfc.googlecode.com/files/libnfc-1.5.0.tar.gz
tar xfvz libnfc-1.5.0.tar.gz &&cd libnfc-1.5.0
svn checkout
http://libnfc.googlecode.com/svn/tags/libnfc-1.5.0/debian
dpkg-buildpackage -rfakeroot
dpkg -i ../libnfc*.deb


mfoc就也工作了~

没有什么新东西,只有新问题~后续工作等到十一回家慢慢玩吧~折腾他们太操心了

 

I”s 第三日

都已经是第三天了,我以为开始正常上班忙碌起来心头的抑云就会散去了,I guess not this time. 下午写着代码居然I”s的最后几幕又浮现眼前,季子最后在录像带里对一贵说的话像一段背景音乐一直伴随着全卷终了(总不能在这儿触景生情的潸然泪下吧)。不管是季子还是寺谷靖雅还是麻生蓝子,似乎哪个人都能在一贵感情迷茫临近退缩的时候站出来帮他分析来龙去脉,何去何从,并且他们都是自愿退出一贵和伊织的感情故事,他们是可贵甚至理想的,一贵是幸运的。归根结底是一贵自己的执着追求不离不弃是他达到幸福的彼岸。

相比最初的几天,虽然目前仍是隐隐内心痛的状态,但已经能够稍微分析一下这个故事而不是再把他完全作为事实来看待了,不然的话估计要永远沉沦于这些画面之中而无法解脱了。伊织在校三年,居然没有一个第三人正式追求过她,这当然成就了一贵得天独厚的机遇。反而一贵三年倒是有好几个让他不知所措的感情种子,但还好他终能克制了这种青春躁动的生理冲动,季子也能够清醒认识真相并毅然退出。真正隔阂彼此倒是一贵和伊织的胡思乱想,虽然一句话就能解除误会,但正是轻信自己的推理而让尴尬持续,大费周章。

为什么结尾季子的录像搭配一贵和伊织的牵手前行能成为直击内心感情涌动之泉的催泪弹,恐怕是因为它真的是一个极佳的答案。它回答了季子为什么退出,一贵一直追寻的梦想,也是曲折的情节总向着一个方向不断行进的本质所在。写来写去,也不知道是能帮我排解这种情绪,还是在不断激发它,难道蔡老师当年的“笑看人生”才是正解?怎么好像一部漫画把我从童年带到了中年

W2T

一觉醒来望着阴雨天空,我居然还是无法释怀,相比眼泪,更多的是心理上的起伏不定。难道I”s比其他漫画能产生更多共鸣吗,或者是近来我变得异常脆弱多愁善感了。原来这个故事不是讲给我听,而是把我的故事讲出来给自己听的,but I ‘ve missed the very ending。

ITCHAN小学告白留下的阴影让他中学面对心动的女孩缺少自信与勇气走上前去。似乎只有看起来是被安排的才是可以安心相处。即使这样,他们居然仍不断有很多次接触。几年后他知道了她原来也是喜欢着他的时候,幸福终于第一次扣响了门闩了。

不同的是当我知道这件事的时候,I guess I ‘ve already missed my bus, the bus conducts me to love. 原来那些暗示是那么明显,但别以为这些暗示就代表了永恒,What a fool I am! I should not hide any more, just face to my feelings. 那种心口不一,躲躲闪闪,是自己的伤,是别人的负担。I missed the confession once, perhaps that ‘s the only confession I need for my whole life.  第一次后悔曾经的选择,第一感受到不完整的情感世界,而且确实有机会与之擦肩而过。I wonder what it will be like today if I confess to you during middle school.

“What is your dream”

“It is only until recently that I could clear my thought. No matter what the dream is, you are always there. No matter how many girls walking by, you are the only one I could imagine as a lover living togther.”    

“(Please fill in the blank)”

I have no fear to face the feelings anymore, I love you all the way from that day we first met, no more, no less.

I”s

这是一场梦,梦见你又回到青涩酸甜的校园,ITCHAN的心理活动就像是一个缩影,戏剧性的部分只是他在几页纸之间把你几年的情感实实在在的画了出来。

http://www.anymanga.com/i-s/,我看的是英文版,也许在本该忙碌的夏日只有打着英文学习的借口才能慰藉闲暇乐怡的时光。日文漫画,译成英文,华人看,没有任何语言隔阂,因为那不过是又一次开始做年轻时的白日梦。

原来我也和他一样都这么喜欢胡思乱想,他喜欢往糟糕了想,我也一样,现实很简单,简单的最难理解。

别那么忘我的激励他人,也许那并不是她想要的,也许它一开始想要就只是你,是你把她一步步从自己身边推开。但没有那山间的回声荡漾,会不会彼此就没有了这种归属的感激。梦想不一定是个 职业,不一定是一番事业,它也许就是为对方付出,着想,牵手走在一起。两个互相单恋的人是最酸的,一旦走在了一起也是最让人欣欢的。爱是彼此的,单方面的不是爱,是让你自己或者让对方受伤的篇章。

白底黑字,白纸黑画,纯粹的写实,真切的个人,在现实的不能再现实的一幕幕间给你讲一段曲折的不能在曲折的神伤。我想很难有机会再回到这里了,这也许是每一次到结局时分都惆怅不已的原因,即便是一个故事,你也没有机会去第二次演绎当中的对白,那它和真实的人生区别在哪里呢。同样激起了你内心的波澜,就当做自己亲身经历的一次别样的旅程有何不妥,何况这并不是一个与你相去甚远的人生,只是你曾经失去的那一段情色绵绵,踯躅,踌躇,踟蹰。

还有心思精力,但我不想用彩色打点上下文字,他们只适合最写实的陈放。

我的手机

此篇完全是写给自己的,提醒一下下次换手机需要的特性:

现在用的nokia N86的好功能一定要保留。具体说来

  • 键盘输入快且准,qwerty或者九键都无所谓,没有触感的虚拟键盘是没办法产生手指记忆的,更不可能盲打。
  • 通话记录查询一键直接,菜单选项选来选去的才进去是多么恼人的一件事儿。手机的短信,电话功能才是核心。
  • 关机闹铃当然要native支持,没用过还真没发现,原来现在很多手机都不支持这个功能才使得很多人睡觉还得开着机。
  • 照相机必须强劲,总有人说你想要高清晰度就买相机啊。带个手机我都嫌累赘,还能拿相机吗?况且相机能发彩信吗,能用来扫描二维条形码吗,能把照片通过Email发送走吗。

To Be Continue……

同时为了适应PWN的目的,手机最好带有下属特性

  • 电池工作时间足够长久,怎么也得能满功耗(WIFI,蓝牙全开,打着游戏或者打电话)下跑一天吧
  • 需要蓝牙,需要NFC,需要WLAN网卡,最好支持monitor mode
  • 如果能有通用USB接口,有红外,rj45接口就更好了
  • 操作系统不管是Android还是Windows Phone,但一定得做到能安装任意软件,脚本环境,完全调用手机每个功能部件

To Be Continue……

眼下看,饱含Nokia情节的我感觉Lumia 1000极有可能达到上述要求,期待上市中……