Quantcast
Channel: 看雪安全论坛
Viewing all 9556 articles
Browse latest View live

【原创】Android Linux内核编译调试

$
0
0
对于在Windows上写代码写习惯的人,调试是必不可少的手段,但是转到Android以后,发现调试手段异常简陋,跟Windows简直不是一个级别,特别是Android的内核调试,网上资料也相对较少,不过通过一段时间的倒腾,我终于找到了还算靠谱的调试方法.就是利用Emulator + Eclipse进行Android Linux内核调试.
 
1.系统预装环境
在目前为止,都是使用的最新版本的Android开发环境
 
Ubuntu 14.04 
Android SDK( adt-bundle-linux-x86_64-20140702 )
Android NDK( android-ndk32-r10b-linux-x86_64 )
 
安装好这几个环境以后,设置一下环境变量
 
export PATH=$PATH:ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin
 
ANDROID_NDK_HOME键值为Android NDK安装目录,设置这个环境变量的目的主要是为了使用gcc 4.6版本编译linux内核. 
 
export PATH=$PATH:ANDROID_SDK_HOME/sdk/tools
 
ANDROID_SDK_HOME是Android SDK的安装目录,设置这个环境变量的目的是方便使用emulator命令!
 
万事具备.使用前面安装的Android SDK创建一个虚拟的设备.并且确保 emulator -avd Device_Test这条命令可以启动Android 模拟器.先热身下. 

http://www.joenchen.com/wp-content/uploads/2014/09/57EB1021F59CD9EB930D052193FFBD6714A7060B.png
 
2.Android Linux内核编译
 
2.1 下载GoldFish 源码
 
mkdir kernel 
cd kernel
git clone http://android.googlesource.com/kernel/goldfish.git

GoldFish是适配模拟器的内核源码,如果是要具体适配其他机型,请选择其他源码,这边不展开了,详情参考链接有说明. 如果失败了,换https.我换https是因为使用了代理,现在google被墙,不使用代理搞不动!
 
git clone https://android.googlesource.com/kernel/goldfish.git
 
http://www.joenchen.com/wp-content/uploads/2014/09/91EBBB45C42B10BF3E01F0ADCC0E95A3308D8BF2.png
 
下载过程看你的代理速度了,而且不能中断.中断了就要重新来,特别的麻烦和恶心!所以我上传了一份到百度云. 和上面goldfish出来的一样.可以考虑去下载
 
http://pan.baidu.com/s/1i3yzhbv
 
下载或者解压完成以后会在kernel目录下会生成一个goldfish文件夹,进入此目录.查看所有分支
 
 http://www.joenchen.com/wp-content/uploads/2014/09/2A9D2B31588CF932926EDBB97E16B606C89F4ABF.png
 
可以看到, 有很多的版本, 2.6.29和3.4我都测试过. 编译和运行没有任何问题. 所以这边我们拉2.6.29的源码
 
git checkout remotes/origin/android-goldfish-2.6.29
 
 http://www.joenchen.com/wp-content/uploads/2014/09/488E79B6F6D4C052796A7DF3B46DFA05051CDFAB.png

然后目录下就有很多文件了,说明Android Linux的源码下载成功!
 
 http://www.joenchen.com/wp-content/uploads/2014/09/96DB22911050DBEA2F6D0303B01215C1AA5DB36A.png
 
3.2 编译GoldFish 源码
 
编译源码之前,请确认已经将NDK的编译工具设置到环境变量中.我们将使用上述这个目录下的交叉编译器arm-linux-androideabi-gcc
 
export PATH=$PATH:ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin
 
然后在glodfish目录下用gedit打开Makefile文件,找到这两行文字:
 
#ARCH ?= $(SUBARCH)
#CROSS_COMPILE ?=
 
修改成
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-androideabi-
 
 http://www.joenchen.com/wp-content/uploads/2014/09/F9D24B1AE16F13DD860529C9F1AAC17D496BB04C.png
 
保存文件, 然后
 
make goldfish_armv7_defconfig 
 
 http://www.joenchen.com/wp-content/uploads/2014/09/1092FFFDC5E2265FBC77A13344C56AE2F3D264AF.png

注:用$make goldfish_defconfig这样配置也可以编译通过,模拟器也可以启动,但是Android的开机画机就显示不了,$adb shell也死活连不上,原因就是这个goldfish_defconfig这个配置文件问题.
 
Android Linux的基本编译就设置完成了.我们先make 一下
make
 
 http://www.joenchen.com/wp-content/uploads/2014/09/D4E267FA412BE8C5825244BDBDF728822D3C32E9.png

这就表示编译成功了,Linux的源码是Linux上少有的一键make过去的软件,比编译其他Linux应用简单不少.当然到这里编译出来的这个zImage已经可以运行了,但是离我们用来做调试的还是有差距.我们还要开启内核调试和关闭优化. 
 
3.3 开启调试选项
开启Linux内核的调试选项, 先安装依赖性
sudo apt-get install ncurses-dev
然后
make menuconfig
 
 http://www.joenchen.com/wp-content/uploads/2014/09/94B9E26B7171DB1C8B34015A6837B6911A86EC6A.png

进入内核配置界面,勾选下列选项,同时关闭优化
 
General setup —> 
[ ] Optimize for size,进行开启/关闭
 [*] Kernel hacking 
     [*] Compile the kernel with debug info 
     [*] KGDB: kernel debugging with remote gdb —>      
     [*] Enable dynamic printk() call support 
 
关闭Linux内核优化比较麻烦.我通过和朋友讨论,以及网络搜索还没有找到很好的解决办法,原因是默认的Linux内核编译是开启-O2优化的,这种模式之下会造成gdb和实际的源码对不上,相信使用过windbg调试-O2的朋友都有这个经历,所以我们需要关闭Linux的-O2,不过目前还没有很好的解决办法下面这篇文章讨论的解决办法是.针对文件进行关闭优化.下面这两篇文章的讨论都非常有意义:
 
http://www.lenky.info/archives/2013/03/2238
 
http://www.ibm.com/developerworks/cn/linux/l-kdb/
 
这边我们将-Os 和-O2都调成-O.针对具体文件关闭优化,这边就不搞了.具体到自己的调试任务的时候再看. 
 
 http://www.joenchen.com/wp-content/uploads/2014/09/8268DB88D51D1D56F9BF7336FB54501CDA6C7273.png
 
再进行编译, 
make -B
选项-B以强制所有内核源文件全部重新编译(因为我前面编译过一次了,为了保险起见,就让目标文件全部重新生成吧)当出现这个画面,就表示编译成功了
 
 http://www.joenchen.com/wp-content/uploads/2014/09/F4EFED8E86032619D078A7FD0EC6EB12A5450787.png
 
4.Android Linux内核调试
使用emulator 启动我们编译的内核试试
 
emulator -verbose -show-kernel -kernel ~/kernel/goldfish/arch/arm/boot/zImage -avd Device_Test

http://www.joenchen.com/wp-content/uploads/2014/09/21974B47FFE151588E52CB3A7336261FF6BF069D.png

没错, 启动的就是我们的内核2.6.29 时间也对的上.说明我们编译的内核是可以运行的.下一步使用这条命令
 
emulator -verbose -show-kernel -kernel -netfast ~/kernel/goldfish/arch/arm/boot/zImage -avd Device_Test -qemu -gdb tcp::1234,ipv4, -S
 
这条命令会在tcp端口的1234监听.加了-S还会暂停下来,等待着gdb链接上来.这时候我们开启NDK目录下面的gdb.链上去然后
 
target remote localhost:1234 
 
 http://www.joenchen.com/wp-content/uploads/2014/09/BBA04B5A12D5CE44384B718B9A4F831B7FD121F7.png

还可以测试几条命令, 看看源码是否跟上了. 
 
http://www.joenchen.com/wp-content/uploads/2014/09/A6A2B020263E3E417C2DA98BDA872A145984C2C9.png
 
到这里为止,基本上是用gdb连上emulator 进行内核调试应该没问题了.但是仅仅到这里那离windbg的调试还是差好几条街.所以我们还是需要一个更好的调试方法.是用eclipse来作为调试的前端!
 
5.Eclipse前端
是用Eclipse作为前端的好处是,无论是在windows,在linux下面都没有问题.可以在一台windows的机器上,远程调试android内核.所以为了截图方便,我下面的操作都是在windows上弄的,在Linux上也是一样!当然要在windows上进行调试,首先要将上面的gold目录复制到windows的机器上,或者是共享给windows.这里就不展开了!
 
运行Eclipse,点击菜单Help->Install New Software… 在弹出的对话框里点击Work with:后面的下拉按钮,选择Kepler – http://download.eclipse.org/releases/kepler
 
不同的Eclipse版本选择不一样,与自己下载的版本一致一即可.然后在下面的选择框中将以下选项安装上

Programming Languages 
 C/C++ Autotools support
 C/C++ Visual C++ Support
 C/C++ Development Tools
 C/C++ Development Tools SDK
Linux Tools
 GDB Tracepoint Analysis
 Mobile and Device Development
 C/C++ GDB Hardware Debugging
 
安装好后自动重启Eclipse即可.再配置点击菜单Window -> Preferences在弹出的对话框中,点击左边的General->Workspace将右边的Build automatically复选框不选中.
再点击对话框左边的C/C++->Indexer,将右边的Enable indexer和Automatically update the index两复选框不选中.
 
接下来就简单了.创建一个工程,点击菜单File->New->Project…在弹出的对话框中选择C/C++->C Project再点击Next >按钮
 
 http://www.joenchen.com/wp-content/uploads/2014/09/578AA051F5795958CE5B3C1BEC880DF16C3CBC11.pnghttp://www.joenchen.com/wp-content/uploads/2014/09/90FD57BC24C13364D3EA4F9F4B1A97591EB19971.png

其中Project name:为工程名,可自定义.而Location:则为工程文件所在路径,此处设置为我们下载的源码路径而Project type:则设置为Makefile project/Empty Project, Toolchains:则设置为Linux GCC,如果是windows设置成Android GCC最后点击Finish即可.
 
接下来Windows和Linux都一样,进行DEBUG配置,在Project Explorer里右击刚创建的Linux_Kernel项目,在右键菜单中点击Debug As->Debug Configurations…在弹出的对话框中双击GDB Hardware Debugging 然后配置调试选项如下图
 
 http://www.joenchen.com/wp-content/uploads/2014/09/D10C415DD25E33645413ABA5B448097907658264.png

将C/C++ Application:栏设置为Linux Kernel源码编译出来的vmlinux文件所在路径(包含文件名),然后将Disable auto build选上,切换到Debugger页,修改配置如下截图.
 
 http://www.joenchen.com/wp-content/uploads/2014/09/934B82A13A481BF4530D58AE919FBB151B5CBE46.png
 
这里是设置gdb的路径还有远程地址和端口. Gdb的路径在ndk安装目录下的如下路径
 
\toolchains\arm-linux-androideabi-4.6\prebuilt\windows-x86_64\bin
 
远程地址,我的ubuntu机器是192.168.1.2这个随机应变即可.端口是我们运行emulator命令定义的端口.搞定这个切换到Startup页面
 
 http://www.joenchen.com/wp-content/uploads/2014/09/C14F4339A2579D6F9D4E12793700CCCDA144C9B2.png
 
将Reset and Delay(seconds)和 Halt 还有Load image复选框的勾都去掉.然后点击Debug,这时候就停在第一条指令了

http://www.joenchen.com/wp-content/uploads/2014/09/2F0296358C816A6DC1403AC76D2684939D5061E6.png 

这时候还不能按F5, F6单步.我们在Execut窗口指定到main.c 然后在 start_kernel上下个断点也可以再Console窗口敲命令break start_kernel. 然后敲入命令C. 
 
http://www.joenchen.com/wp-content/uploads/2014/09/E3803C04CB88FB4F5C5D84D9A44D60DF5D01845A.png 

这时候就停在了Linux内核的入口函数start_kernel.也可以使用F5,F6了.寄存器显示各方面都可以了.如果在Windows上,有一个毛病,源文件都要自己重新指定路径.不然认不到. 默认都是编译路径/home/xxx什么的.要重新指定成Windows的盘符形式.不过在Linux上调试就没有这个问题了!
 
 http://www.joenchen.com/wp-content/uploads/2014/09/60A7E3105AD8B2EEF852FFB8813970806C3B2E5D.png
 
这个调试差不多是搞起走了.如果是分析Android的源码,看一看跟一下还是很不错的.不过还是有一个问题没有解决,关于汇编和符号不对应的问题.
大家可以群策群力搞一下 QQ群: 127285697

这边文档格式排起来真麻烦. 我在我的博客也发了这篇文章. http://www.joenchen.com/archives/1093

参考链接:
http://wenku.baidu.com/view/95c69448e518964bcf847c2f.html 
http://blog.csdn.net/flydream0/article/details/7070392 
http://www.lenky.info/archives/2013/03/2238 
http://blog.csdn.net/liushuaikobe/article/details/8646555
http://x-slam.com/da_jian_eclipse_qemu_gdb_diao_shi_linux_kernel_huan_jing

【招聘】ITools寻逆向(反编译)工程师

$
0
0
安卓逆向开发   2人
工作职责

1、安卓平台底层逆向开发;
2、itools一键root相关模块开发。

任职资格:

1、熟练掌握C/C++,有一年以上的相关开发经验;
2、熟悉x86和arm汇编,有较强的程序反汇编技术和逆向分析能力;
3、熟练使用IDAPro,gdb等工具;
4、学习能力强,能快速接受新技术,不限学历;
5、熟悉elf文件格式,对elf壳有研究者优先;
6、熟悉安卓平台下漏洞利用者优先。

公司简介
       创想天空成立于2011年,创始团队包括腾讯QQ最初创始骨干/股东及多名互联网精英,具备丰富的互联网领域经验及领先业界的技术优势。 创想天空专注于互联网包括移动互联网领域,一切以产品和用户为本,我们的目标是首先为用户打造最好的互联网产品,在此基础上提供围绕产品的更多优质服务,为用户、为社会创造价值,同时实现自己的价值。
我们的产品
核心产品——iTools,无需越狱,最好用苹果设备PC端同步管理工具
iTools(win版)是一款简单易用的苹果设备PC端同步管理软件。无论苹果设备是否越狱,都可以通过iTools进行管理,并提供海量的互联网资源随意下载,以及打造最安全与专业的苹果设备系统信息修改平台,充分满足苹果用户的各种需求,目前用户数已突破6000多万。
全新升级版iTools2.0及手机版兔子助手也如期而至,更多更好的维护我们期待您的一起加入!
 
您可以通过我们的公司网站更全面地了解我们公司: www.itools.cn
  微电影  :http://www.itools.cn/zhuanti/wdy.htm

【原创】越狱的苹果iPhone5 锁屏密码 破解演示视频

$
0
0
【原创】越狱的苹果手机iPhone5 锁屏密码 破解演示视频

本演示视屏展示黑客如何对已越狱的苹果手机iPhone5c 进行锁屏密码的破解。

支持的设备:32位的设备,如iPhone5 iPhone5C iPad2 iPad3 iPad4 iPod touch5等,64位的设备目前还不支持,iPhone4及以前的设备,根本不需要越狱就可以实现。

知道了锁屏密码后,就可以进行dumpkey、解密keychain,文件系统解密等更多有意思的工作。

下载地址:
http://pan.baidu.com/s/1mgt9srI

源代码等把64位的设备兼容了再一起放出,程序的运行过程需要对内核进行patch,而对内核进行patch需要对页表项进行修改,目前还没有搞清楚如何找到64位系统的页表项,所以还不支持64位设备,请了解如何对64位的系统进行内核patch的朋友不吝指教。

【原创】Hook Java的的一个改进版本

$
0
0
<center> Hook Java的的一个改进版本
--------------------------

[《注入安卓进程,并Hook java世界的方法》](http://bbs.pediy.com/showthread.php?t=186054)这篇好文相信大家都看这,里面所提到的方法估计大家也都试过。不过里面的所用的方法,我发现有两个可以改进的地方。

##改进点一:更简单地修改java方法为本地方法##

```
...
// hook method
int argsSize = calcMethodArgsSize(method->shorty);
if (!dvmIsStaticMethod(method))
argsSize++;

SET_METHOD_FLAG(method, ACC_NATIVE);
method->registersSize = method->insSize = argsSize;
method->outsSize = 0;
method->jniArgInfo = dvmComputeJniArgInfo(method->shorty);

// save info to insns
method->insns = (u2*)info;

// bind the bridge func,only one line
method->nativeFunc = method_handler;
LOGI("[+] %s->%s was hooked\n", classDesc, methodName);
...
```
直接把method->nativeFunc即可,无需重新调用JNIEnv的RegisterNatives方法,其中method_handler可以是下面两种形式之一:

```
typedef void (*DalvikBridgeFunc)(const u4* args, JValue* pResult, const Method* method, struct Thread* self);
typedef void (*DalvikNativeFunc)(const u4* args, JValue* pResult);
```

这样有一个好处,就是所有java方法都可以统一指向同一个native func,而不需要像为每一个java method方法指定一个native func。

##改进点二:方法回调避免线程安全问题##
原来的方法,是这样的

```
//hook之前先拷贝
uint mlen = sizeof(Method);
Method *oldMeth = (Method*)malloc(mlen);
memcpy(oldMeth,method,mlen);
info->odlMethod = oldMeth;
info->curMethod = method;

//回调后再拷贝回来,再通过jni->callXXXXMethod调用,之后再重新hook
memcpy(hi->curMethod,hi->odlMethod,mlen);
jmethodID om = (jmethodID)hi->curMethod;
jenv->CallVoidMethod(me,om,gDevice_Sensors);
ClassMethodHook(jenv,&baiduhookInfos[0]);
```
这个方法,其实是有线程安全问题的,其中在dalvik中,有很多方法可以直接调用Method对象,比如dvmCallMethod, dvmCallMethodA, dvmCallMethodV,dvmInvokeMethod等等。针对DalvikBridgeFunc和DalvikNativeFunc的参数,我最后选择使用dvmInvokeMethod,这个函数的原型是这样的:

```
Object* dvmInvokeMethod(Object* obj, const Method* method, ArrayObject* argList, ArrayObject* params, ClassObject* returnType, bool noAccessCheck)

```

其中,obj是this或者null(如果是static方法),method可以直接使用hook之前copy的对象,比较麻烦是argList,params和returnType的获取。获取argList的方法,我在Proxy.cpp中到了现成的boxMethodArgs方法,而returnType通过Reflect.h中dvmGetBoxedReturnType的方法也可以获取,而剩下的params只能自己写代码了,下面是我的代码:

```
STATIC ArrayObject* dvmGetMethodParamTypes(const Method* method, const char* methodsig){
/* count args */
size_t argCount = dexProtoGetParameterCount(&method->prototype);
STATIC ClassObject* java_lang_object_array = dvmFindSystemClass("[Ljava/lang/Object;");

/* allocate storage */
ArrayObject* argTypes = dvmAllocArrayByClass(java_lang_object_array, argCount, ALLOC_DEFAULT);
if(argTypes == NULL){
return NULL;
}

Object** argObjects = (Object**) argTypes->contents;
const char *desc = (const char *)(strchr(methodsig, '(') + 1);

/*
* Fill in the array.
*/
size_t desc_index = 0;
size_t arg_index = 0;
bool isArray = false;
char descChar = desc[desc_index];

while (descChar != ')') {

switch (descChar) {
case 'Z':
case 'C':
case 'F':
case 'B':
case 'S':
case 'I':
case 'D':
case 'J':
if(!isArray){
argObjects[arg_index++] = dvmFindPrimitiveClass(descChar);
isArray = false;
}else{
char buf[3] = {0};
memcpy(buf, desc + desc_index - 1, 2);
argObjects[arg_index++] = dvmFindSystemClass(buf);
}

desc_index++;
break;

case '[':
isArray = true;
desc_index++;
break;

case 'L':
int s_pos = desc_index, e_pos = desc_index;
while(desc[++e_pos] != ';');
s_pos = isArray ? s_pos - 1 : s_pos;
isArray = false;

size_t len = e_pos - s_pos + 1;
char buf[128] = { 0 };
memcpy((void *)buf, (const void *)(desc + s_pos), len);
argObjects[arg_index++] = dvmFindClass(buf);
desc_index = e_pos + 1;
break;
}

descChar = desc[desc_index];
}

return argTypes;
}
```

通过上面几个类型的获取之后,最后再看一下整个method hook的实现,过程其实大同小异,不过直接把上述提及的向种类型信息预先获取并保存到method->insns里头了:

```
extern int __attribute__ ((visibility ("hidden"))) dalvik_java_method_hook(JNIEnv* env, HookInfo *info) {
const char* classDesc = info->classDesc;
const char* methodName = info->methodName;
const char* methodSig = info->methodSig;
const bool isStaticMethod = info->isStaticMethod;

jclass classObj = dvmFindJNIClass(env, classDesc);
if (classObj == NULL) {
LOGE("[-] %s class not found", classDesc);
return -1;
}

jmethodID methodId =
isStaticMethod ?
env->GetStaticMethodID(classObj, methodName, methodSig) :
env->GetMethodID(classObj, methodName, methodSig);

if (methodId == NULL) {
LOGE("[-] %s->%s method not found", classDesc, methodName);
return -1;
}


// backup method
Method* method = (Method*) methodId;
if(method->nativeFunc == method_handler){
LOGW("[*] %s->%s method had been hooked", classDesc, methodName);
return -1;
}
Method* bakMethod = (Method*) malloc(sizeof(Method));
memcpy(bakMethod, method, sizeof(Method));

// init info
info->originalMethod = (void *)bakMethod;
info->returnType = (void *)dvmGetBoxedReturnType(bakMethod);
info->paramTypes = dvmGetMethodParamTypes(bakMethod, info->methodSig);

// hook method
int argsSize = calcMethodArgsSize(method->shorty);
if (!dvmIsStaticMethod(method))
argsSize++;

SET_METHOD_FLAG(method, ACC_NATIVE);
method->registersSize = method->insSize = argsSize;
method->outsSize = 0;
method->jniArgInfo = dvmComputeJniArgInfo(method->shorty);

// save info to insns
method->insns = (u2*)info;

// bind the bridge func,only one line
method->nativeFunc = method_handler;
LOGI("[+] %s->%s was hooked\n", classDesc, methodName);

return 0;
}

```

然后是method_handler的实现,这个方法是所有java方法的跳转函数,所以在这里可以注册callback,不过这部分逻辑我没有做上,有兴趣的朋友可以加上。

```
STATIC void method_handler(const u4* args, JValue* pResult, const Method* method, struct Thread* self){
HookInfo* info = (HookInfo*)method->insns; //get hookinfo pointer from method-insns
LOGI("entry %s->%s", info->classDesc, info->methodName);

Method* originalMethod = reinterpret_cast<Method*>(info->originalMethod);
Object* thisObject = (Object*)args[0];

ArrayObject* argTypes = dvmBoxMethodArgs(originalMethod, args + 1);
pResult->l = (void *)dvmInvokeMethod(thisObject, originalMethod, argTypes, (ArrayObject *)info->paramTypes, (ClassObject *)info->returnType, true);

dvmReleaseTrackedAlloc((Object *)argTypes, self);
}

```

最后通过dvmInvokeMethod就可以直接调回原来的函数了。

##最后##
写这个代码,主要是因为我在工作中要注入到某个系统进程,然后要hook java中的某些方法,但用cydia和xposed感觉太笨重了,特别是xposed,里面的很多参数的boxed/unboxed都是通过jni模块自动转换的,整个框架已经离不开dex文件了。

所以才想自己实现一套纯本地的java hook代码,而《注入安卓进程,并Hook java世界的方法》所介绍的方法,我感觉用起来不太方便,跟cydia和xposed两个框架的主要区别就是缺少了一个“中转函数”,所以而有了本码。

代码我上传到[github](https://github.com/boyliang/AllHookInOne.git),目前只有java hook,我打算把目前的hook技术都集成到这里,包括inline hook, elf hook等等。

上传的附件
文件类型: pdf Hook Java的一个改进版本.pdf (121.1 KB)

【招聘】深圳软牛科技有限公司

$
0
0
软牛科技,等的就是你:p:,欢迎广大逆向爱好者前来参观、咨询

【原创】ALICTF2014 evilAPK400完整脱壳分析

$
0
0
这是ALICTF2014的EvilApk 400pt的脱壳分析笔记。据说这是阿里加固小组做的初级版本,但我这种小菜也是被搞的脑洞大开。分析断断续续花了4天,文档就写了2天,简直惨~期间也是学到了很多新知识,不敢藏私,果断分享。文中肯定有很多不对的地方,望大牛们斧正!:p:

上传的附件
文件类型: zip aliEvilAPK_4分析.zip (1.20 MB)

危险的云端,从好莱坞明星裸 照泄露说起

$
0
0
新闻链接:http://www.heishou.com.cn/read.php?tid=121382
新闻时间:发表于: 09-04
新闻正文:
最近一段时间,欧美女性艳照门沸沸扬扬。詹妮弗·劳伦斯这种大牌三点全露的照片被传的到处都是,涉及的女星还有多位。


当年,陈冠希修电脑,艳照门让多位女星蒙羞,张柏芝和谢霆锋虽然当时表演的宽容大度,但是最后还是离婚告终。


如今,明星们不再需要修电脑,就能让隐私照传遍天下,云端的风险问题用这种香艳的方式暴露了出来。




数据的安全保护

很久很久以前,计算机数据保护是一个物理问题。计算机不联网,或者仅仅在内部联网。


外部想要获取计算机的数据,或者你物理接入内部网络,或者你用储存介质把数据复制出来。


只要把计算机的对外接口封闭掉,把网络物理隔离开,做好电磁屏蔽,黑客本领通天也得学会当 007 潜入机房。数据的安全问题相对比较容易保护。


后来,有了互联网。全世界的网络联成了一张大网。这个时候数据保护就成了高科技工作。


网络设备做隔离,服务器做隔离,对内外网传输的数据做各种防范,发展各种安全认证手段。但有意思的是,无论你如何防范,黑客只要能找到一条物理上畅通的渠道,就有办法绕开你的安全防范。


除非做物理隔离(政府要害部门内外网物理隔离,甚至两块硬盘切换不同的网络)。否则,就没有绝对的安全。网络设备、操作系统总有各种各样的漏洞和后门。
技术强大如苹果、华为,一样被攻击、窃听。就更不用说一些小厂商了。


互联网时代,只有相对的安全。

云端的问题

长期以来,虽然互联网安全问题存在,但是对个人来说并不太危险。除了大规模肉鸡泛滥的几年,随着近几年安全软件的流行,大部分消费者的隐私不太容易被窃取。


不是个人电脑入侵有多难。而是黑客很难判断上亿台电脑里面哪台有高价值信息。花费一两个小时入侵一台抠脚大汉欣赏爱情动作片的专用电脑毫无意义。没有 5 位 QQ 号,没有高价值网络游戏账号、没有网银、入侵没有利益诱惑。


但是云的出现改变了一切。云端不仅仅是一个用户,而是成千上万个用户,突破了云端的安全防范,全球千万、上亿级别的隐私数据就暴露在黑客面前。


1000 个抠脚大汉黑客可以置之不理,1 个当红女明星就可以让黑客值回票价。


同样,如果淘宝的服务器被入侵、腾讯的服务器被入侵……后果不堪想象。


这些云端的服务器永远在线,物理上不隔离,黑客有入侵的可能和便利。同时,这些云端服务器记录的大量数据都是高价值数据,黑客入侵有足够的利益诱惑。


最后,防范变成技术的较量,攻击方可以输 10000 次,而防守方输 1 次就是致命的。两者不对等,防守方处于劣势。


这次女明星艳照门也许只是冰山一角,之前携程数据泄露,小米论坛、天涯论坛用户名泄露都是警钟。云端极其危险,这是黑客业界的共识。



用户对云应该有防范之心

在互联网时代,把个人信息安全完全依赖于第三方厂商是靠不住的,无论它是苹果还是谷歌。


真正靠谱的安全保护,还是物理隔离。你的隐私照片用数码相机拍摄,老老实实放在你家对外不联网的电脑里面。只要不去修电脑,黑客天大的本事也只能当 007 才有机会。


各种互联网支付手段,都要有戒备之心。零钱可网上支付,大钱还是老老实实的柜台办理,不开通其他支付和转账手段。 越智能的东西,被入侵的概率就越大。短信验证码用的手机,老老实实用不能运行任何第三方程序的功能机,这样黑客本事再大,也劫持不了你的短信。


无论对个人还是机构,有时候笨办法比技术专家更管用。


连政府安全敏感的部门都用双硬盘。有敏感数据的硬盘,连接外网时直接断电。作为个人和机构,你凭什么相信自己的技术实力比政府安全敏感部门更强大?
所以,我们每个人都要对云有防范之心,用笨办法保护自己的隐私更安全。

The Enigma Protector 3.70脱壳后不能使用

$
0
0
程序的dll文件成功脱壳修复后,在运行过程中出现了如下错误:
ImportError: DLL load failed: 内存分配访问无效。

请教各位高手这是什么原因啊

Xen漏洞曝光

$
0
0
新闻链接:
http://www.solidot.org/story?sid=41326
新闻时间:

2014年10月02日 08时08分
新闻正文:Xen是大规模部署的虚拟化方案之一,这一轮的*EMBARGO*一共曝光了5个漏洞,其中最后一个已经于北京时间2014年10月1日晚上披露,这个编号CVE2014-7188的漏洞是由SUSE Linux的工程师Jan Beulich发现的,Xen和KVM的实现略有不同,在x86架构上,其hypervisor是运行于RING-0的,而传统的linux内核host运行于RING-1,通常的系统调用是直接CALL到RING-1,只有hypercall才是CALL到RING-0,引发这个漏洞的代码在于对于高级电源管理的hypercall中的实现本来只能访问到256个MSR(Model-specific Register),而事实上是可以读写访问1024个MSR的,对于写并不会出现什么问题,而读的话则造成了安全隐患,攻击者利用的方式包括:1,读到超过一个页表的地址然后引用造成物理机crash; 2,读取同一台物理机上其他guest的信息从而造成信息泄漏。目前Xen社区已经修复,从补丁看,只是简单的调整了读写范围。这个漏洞只影响了x86平台的实现,ARM平台未受影响。

通常XEN的利用难度都很高,有兴趣的读者可以去看看曾经著名的虚机逃逸漏洞CVE-2012-0217的分析,目前虚机逃逸的成本Xen > KVM > docker。 "

安全公司发现针对iOS越狱用户的国产木马

$
0
0
新闻链接:http://www.solidot.org/story?sid=41328
  
新闻时间:2014年10月02日 11时15分 星期四
   
新闻正文:



Lacoon移动安全公司的研究人员报告了一个感染iOS越狱手机的中国间谍程序Xsser mRAT,它的主要攻击目标是香港的抗议者。Xsser与此前发现的Android间谍程序共享了相同的指令控制服务器域名。之前发现的Android间谍程序伪装成协调占中示威者的应用,通过Whatsapp传播。研究人员认为,针对 iOS 和Android设备的跨平台攻击与中国政府有关联。Xsser mRAT是至今发现的第一个也是最先进的中国产 iOS木马。感染Xsser需要设备越狱和安装 Cydia。在中国,iOS设备的越狱相当流行,iOS 7的越狱方式是中国黑客组织haX0r发现的。在感染了Xsser后,恶意程序会窃取短信、电子邮件、照片、即时通讯、位置数据、用户名和密码,呼叫日志和联系人信息。Xsser mRAT在设备启动后会立即运行,能动态更新。

美国指控四名黑客窃取微软及军方1亿美元数据

$
0
0
新闻链接:http://tech.feng.com/2014-10-01/U.S._charges_four_hackers_Microsoft_and_military_100_million_data_596490.shtml

新闻时间:2014-10-1 12:55

新闻正文:北京时间10月1日凌晨消息,美国司法部周二称,一个据称是电脑黑客团伙的四名成员被控窃取了价值1亿美元以上的软件和数据,这些软件和数据被用来训练军方飞行员,此外还有一些与微软Xbox游戏机有关。

  美国司法部称,在周二早些时候对外公布的这项起诉中,上述四名黑客团伙成员中的两人已经认罪,分别是一名28岁的新泽西州人和一名22岁的加拿大人。

  联邦检察官称,这个黑客团队在2011年1月到2014年3月之间黑进了微软及其合作伙伴的电脑网络,窃取了Xbox One游戏机的源代码、技术规格及其他信息。在遭遇攻击时,微软尚未公布这些数据。另外,这些黑客还窃取了视频游戏《战争机器3》(Gears of War 3)和《使命召唤8:现代战争3》(Call of Duty: Modern Warfare 3)预览版的相关信息。

  根据美国司法部的指控,这些黑客还被控黑进了美国陆军的网络,窃取了用于训练波音阿帕奇攻击直升机飞行员的模拟训练软件。指控称,这些黑客获取电脑网络准入权的方式之一是,利用**的公司员工及其人的用户名和密码登入网络。

  美国司法部称,已向特拉华州联邦法庭认罪的两名黑客分别名叫Sanadodeh Nesheiwat和大卫·珀科拉(David Pokora)。此外,来自于马里兰州的20岁黑客内森·莱罗克斯(Nathan Leroux)和来自于印第安纳州的18岁黑客奥斯丁·阿尔科拉(Austin Alcala)也在一项包含18项罪名的起诉中遭到了指控。

其他内容 【求助】编写驱动的时候VS2008提示BYTE未定义。

$
0
0
代码:

1>DDKBLD: ================ Build warnings =======================
1>1>e:\projects\other.h(57) : error C2065: 'BYTE' : undeclared identifier
1>1>e:\projects\other.h(57) : error C2065: 'BYTE' : undeclared identifier
1>1>e:\projects\other.h(57) : error C2146: syntax error : missing ';' before identifier 'Null'
1>1>e:\projects\other.h(57) : error C2146: syntax error : missing ';' before identifier 'Null'
1>1>e:\projects\other.h(57) : error C2065: 'Null' : undeclared identifier
1>1>e:\projects\other.h(57) : error C2065: 'Null' : undeclared identifier
1>1>LINK : fatal error LNK1181: cannot open input file 'e:\projects\objchk_win7_x86\i386\one.obj'
1>1>link : error LNK1181: cannot open input file 'e:\projects\objchk_win7_x86\i386\one.obj'

////////////////////////
以上是错误,但是在任意地方加上 一个BYTE定义 就会报上面的错误。
例如:
代码:

BYTE Null;
或者是:
代码:

BYTE Null[5]={0xe9,0,0,0,0,0};
就会出错,求解决方案…

工程为VS2008+WDK

一周海外安全事件回顾(9.22-9.28):黑客的下一个攻击工具 – 电冰箱

$
0
0
新闻链接:http://www.freebuf.com/news/45741.html
新闻时间:2014-10-2
新闻正文:一伙儿来自亚洲的疯子正在利用电冰箱发起网络攻击,Akamai如是说。而Anons向ISIS宣战也在上周吸足了眼球。



在上周,安全娱乐圈最大的新闻毫无疑问是Bash远程代码注入漏洞(CVE-2014-6271)的曝光,这个漏洞的威胁号称比心脏滴血漏洞更为巨大。我想,上周各大公司的IT维护人员可能都不太好过,特别是一些拥有上万台Linux服务器的大型企业,修复Bash注入漏洞将是一件非常苦逼的工程。

用后脚跟也能想到,围绕Bash注入漏洞背后的修复和利用之间的博弈也是异常激烈的。某大辽国安全厂商在上周捕获了两个恶意程序,这两个程序利用Bash漏洞发起恶意攻击。

其中一个程序是用Perl语言编写的IRC僵尸程序,已经发现有715个肉鸡感染了该僵尸程序。安全人员在程序中发现了罗马尼亚语,这可以帮助白帽子确定程序的源头。从威胁角度上来说,这个僵尸网络以发起DDoS攻击为主要手段。

另一个程序通过ELF二进制格式执行,非常灵活,主要以偷窃信息为主要目标。该程序可以用来搭建僵尸网络。安全人员发现了两个控制台服务器,分别是89.238.150.154:Port 5和 162.253.66.76:Port 53。该程序同样可以用来发起DDoS攻击。

上周另一件有趣的新闻来自Akamai。Akamai发布预警,称一伙儿来自亚洲的疯子正在利用电冰箱发起网络攻击。(原标题:Desperate VXers enslave FREEZERS in DDoS bot,http://www.theregister.co.uk/2014/09/25/desperate_vxers_enslave_freezers_in_ddos_bot/)

在Akamai/Prolexic网站上,关于这款被命名为SPIKE工具包的威胁属性是高危(High Risk):





据Akamai分析,Spike工具包非常先进,这种先进主要体现在工具的设计和应用上。和其他绝大多数僵尸工具不同,Spike僵尸可以是基于Windows和Linux系统的计算机、手机(ARM)以及各种联网的家用电器,如冰箱、洗衣机等等,特别包括当下如日中天的Raspberry PI卡片机。虽然目前版本的Spike工具攻击方式比较简单,主要是DDoS攻击(SYN, UDP, DNS查询, 和HTTP GET洪水等),但是丝毫不能掩盖这款工具先进的设计理念。

这是一个非常有趣的发现。安全娱乐圈一直在意淫黑客利用物联网(IoT)发起这样那样的攻击,Akamai的此番发现更是提供了实例。其背后更有意思的是,这个用“电冰箱砸死你”的工具竟然来自**黑客的发明创造。



上面就是Akaimai称为Spike的黑客工具界面。托Akaimai的福,太尼玛给力了,从截图上包括工具名、版本以及论坛的URL地址清晰可见。

截图上显示的URL是一个名叫“名门网络”的论坛:



在关键词(热搜)里,我们可以看到熟悉的“Linux集群”。笔者没有验证版本v4.0的集群工具是否就是Akamai提到的Spike工具包。单纯从攻击角度上讲,简单有效是工具的最高追求。如果两者真的是同一个玩意儿,我更多想表达是赞叹。

上周还有一件让人感到兴奋的就是Anonymous向ISIS宣战。



笔者觉得,这尼玛是一件非常扯淡的自我炒作。ISIS除了在YouTube上发点砍脑袋的小片儿之外,没有太多的线上行为。其实,看一个小片儿就能激发一个人热血沸腾地加入ISIS的故事只能在好莱坞大片里出现。

从ISIS的外部因素来看,Anons攻击的对象中包括暗地支持ISIS的政府机构。这其实没什么好说的。迄今为止,还没有一个政府向来自互联网的攻击屈服。我想,这也包括支持ISIS的组织。希图靠打个攻击就能让人家断了ISIS的供给,无异于白日做梦。

从ISIS自身来看,他们已经是“恐怖主义2.0”甚至3.0版本,远离互联网是一项基本原则。傻子都知道互联网实际上被辽国控制,跨国的流量很难逃过“五只眼”(Five Eyes)的监控,因此ISIS在线上基本没有太多实质的资产和活动。Anonymous通过互联网攻击ISIS实际上和攻击Twitter、YouTube没什么区别。从网上攻击ISIS最好的手段就是干掉YouTube和Twitter。

嗯,很好,这的确的确让人感到兴奋。再撸几管儿会更爽。

【求助】用malloc开辟一段空间,然后memcpy一个dll的代码进去,通过偏移改eip,为何显示不可读,xt看malloc的空间是readwrite的

$
0
0
如题~~(代码段复制的),改了eip后程序直接蹦了

主题汇网页端完成,欢迎大家体验合作,主题汇网页端合作模式和思路说明。

$
0
0
主题汇是一款以用户访问网站为依据的全自动聚合聊天室,举例来说你在找工作,那么你访问智联招聘 猎聘网等招聘网站,软件会自动加入招聘聊天室,让你跟全互联网使用主题汇并也在找工作的人交流,主题汇的用途大家可以依据这个例子自己去拓展,同时主题汇提供分类精细导航,主题汇提供用户电脑安装程序聚合聊天,手机访问网站安装程序的聚合聊天。

主题汇网页版体验地址:http://www.zhuti.org.cn

主题汇网页端的合作模式,之所以推出网页端,主要是为了解决推广问题,网页端的合作方式是,个人网站或者企业网站在网页端内置我的主题汇主题聊天图标,浏览网站的用户点击进去之后,我会获取网站域名,并把用户加入相应的主题聊天室,实现有效率的快速主题探讨和合作,例如看雪是一个反汇编论坛,内置主题汇之后,用户点击可以自动加入反汇编聊天室,主题汇为同类网站做导航,给网站带来流量,是一种农村包围城市的方式来分散大网站的流量,支持优秀的小网站,同时给用户提供一个聚合主题交流的平台,欢迎个人网站和主题汇合作,用互联网改变创业效率。
主题汇交流群号:8517631

【求助】CryptAcquireContext和CPAcquireContext有什么区别

$
0
0
碰到一个软件用的是Crypto API,但是调用函数的时候,调用的时候先碰到API函数CryptAcquireContext,再调用CPAcquireContext,CryptEncrypt和CPEncrypt,CryptDecrypt和CPDecrypt..等等函数
请教这个如何使用,Crypt带头的API能调用,CP带头API调用不成的。

【原创】阿里EVIL_APK_3题解

$
0
0
闲来无事,今天小弟小小研究了下ALICTF_evalapk_3。虽然题目较简单,但还是学到了些东西,作为学习笔记。仅供小菜玩耍,大大直接忽略即可。限于本菜水平,难免会有疏漏错误之处,还请各位批评指正。
-----------------------------------------------------------------------------------
初看题目,要求构造一个html触发Toast弹出flag。本菜既不懂html,更不会js。先不管这个,看下apk。
反编译apk,发现apk被加个壳。使用ida尝试脱壳,脱壳顺利,dump出了dex文件。具体脱壳流程可以参看:http://www.52pojie.cn/thread-293648-1-1.html 帖子,写得很好很详细,这里就不赘述了。

拿到dex文件反编译,发现dex文件很简单。入口MainActivity主要功能就是加载html文件,然后跳转到webViewActivity。webviewActivity实现了JavaScriptInterface,其中有一个showToast方法,这个方法就是题目要求触发的方法。

仅从解题来说,已经完成了,showToast方法里面给出了Toast内容: "祥龙!"
那如何构造html触发这个方法呢?其实懂js与java的读者一下就知道如何构造了。由于本菜不懂,经过查找资料,以为是利用webview的漏洞,构造html触发,经过各种尝试,未果。感觉和webview漏洞没什么关系。

顺着这个思路,搜索了js与java交互,找到答案。其实就是普通的js调用java方法。简单学习了下js如何调用java方法,关键是:在js中获得java类。addJavascriptInterface方法第二个参数给出了类的别名,供js使用。

再看smali,发现别名是通过"BQ1$*[w6G_"字符串经过ListViewAutoScrollHelpern.decrypt_native得到,解密方法放在了so文件中。到这里思路就很多了,一种是直接分析so算法;二是通过添加logcat smali或者自建一个apk调用so得到;三是将别名赋值一个新值,即自定义别名。当然还有其他思路,就不一一列举了,我这里采用第三种方法。
直接在原smali中添加如图红色区域所示代码:
附件 92649
构造如下html文件:
<html>  
  <head>  
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  <script>
  </script>  
  </head>
  <body>
  <a onClick="window.ThomasKing.showToast()">showToast</a><br/> 
  </body>  
</html>
传入手机测试,弹出Toast。
当然,此题有很多其他解法,可以参看alictf2014 top3的writeup。我认为此题主要考选手脱壳吧。
----------
附件为比赛apk文件。
恭祝各位坛友国庆愉快!:D:

上传的图像
文件类型: jpg 1.jpg (16.4 KB)
上传的附件
文件类型: apk ba34f1892afc312b2c994fa5c41306fcf-jscrack.apk (1.60 MB)

求助 VB发带有Cookie的post包

$
0
0
Private Sub Command1_Click()
Dim Myurl As String, send_data As String, my_head As String '//变量
Myurl = "http://eventie.wanmei.com/w2i/reserverobtain/gameLogin!obtain.action" '//提交的页面
send_data = "bean.server=163&bean.servername=%E4%BC%A0%E6%89%BF%E5%8F%8C%E7%BA%BF-%E5%A4%A9%E8%A1%8C&bean.rolename=%E6%B2%A1%E9%81%93%E7%90%86%E7%9A%84%E7%A9%BA%E9%97%B4" '//提交的值
my_head = "Content-Type: application/x-www-form-urlencoded"
Inet1.Execute Myurl, "POST", send_data, my_head '// POST 或者GET
End Sub
下面这句是Cookie 如何发送。
JSESSIONID=tomcat3~D24B469309539EC0694464E2D37B727E-m1
再看E语言已经成功的写法。
.版本 2
.支持库 spec
A = 编码_Utf8到Ansi (网页_访问 (“http://eventie.wanmei.com/w2i/reserverobtain/gameLogin!obtain.action”, 1, “bean.server=175&bean.servername=%E4%BC%A0%E6%89%BF%E5%8F%8C%E7%BA%BF-%E6%9C%88%E4%BB%99&bean.rolename=%E6%B2%A1%E9%81%93%E7%90%86%E7%9A%84%E7%A9%BA%E9%97%B4”, “JSESSIONID=tomcat3~D24B469309539EC0694464E2D37B727E-m1”, , , , , , ))
调试输出 (A)

【求助】论坛哪有dll 重定位的帖子啊,好人来

他的故事 【讨论】阿里面试一般要几面啊

$
0
0
内推的

1面电话面试
2面电话面试
之后来邮件说
候选人,您好, 请填写履历表 然后一个网站填写的
Viewing all 9556 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>