dex2jar

dex2jar https://code.google.com/p/dex2jar/ http://blog.csdn.net/kesenhoo/article/details/6544094 dex2jar contains following compment dex-reader is designed to read the Dalvik Executable (.dex/.odex) format. It has a light weight API similar with ASM. An example here dex-translator is designed to do the convert job. It reads the dex instruction to dex-ir format, after some optimize, convert to ASM format. dex-ir used by dex-translator, is designed to represent the dex instruction dex-tools tools to work with .class files. here are examples: Modify a apk DeObfuscate a jar d2j-smali [To be published] disassemble dex to smali files and assemble dex from smali files. different implementation to smali/baksmali, same syntax, but we support escape in type desc “Lcom/dex2jar\t\u1234;” dex-writer [To be published] write dex same way as dex-reader.

2014-04-10 · 1 min · 118 words · -

加壳与脱壳

加壳与脱壳 http://blog.csdn.net/lzyzuixin/article/details/4104334 加壳一般是指保护程序资源的方法. 脱壳一般是指除掉程序的保护,用来修改程序资源. 病毒加壳技术与脱壳杀毒方法 : 壳是什么?脱壳又是什么?这是很多经常感到迷惑和经常提出的问题,其实这个问题一点也不幼稚。当你想听说脱壳这个名词并试着去了解的时候,说明你已经在各个安全站点很有了一段日子了。下面,我们进入"壳"的世 界吧。 金蝉脱壳的故事 我先想讲个故事吧。那就是金蝉脱壳。金蝉脱壳属于三十六计中的混战计。金蝉脱壳的本意是: 寒蝉在蜕变时,本体脱离皮壳而走,只留下蝉蜕还挂在枝头。此计用于军事,是指通过伪装摆脱敌人,撤退或转移,以实现我方的战略目标的谋略。稳住对方,撤退或转移,决不是惊慌失措,消极逃跑,而是保留形式,抽走内容,稳住对方,使自己脱离险境达到己方战略目标,己方常常可用巧妙分兵转移的机会出击另一部分敌人。三国时期,诸葛亮六出祁山,北伐中原,但一直未能成功,终于在第六次北伐时,积劳成疾,在五丈原病死于军中。 维遵照诸葛亮的吩咐,在诸葛亮死后,秘不发丧,对外严密封锁消息。他带着灵柩,秘密率部撤退。司马懿派部队跟踪追击蜀军。姜维命工匠仿诸葛亮摸样,雕了一个木人,羽扇纶巾,稳坐车中。并派杨仪率领部分人马大张旗鼓,向魏军发动进攻。魏军远望蜀军,军容整齐,旗鼓大张,又见诸葛亮稳坐车中,指挥若定,不知蜀军又耍什么花招,不敢轻举妄动。司马懿一向知道诸葛亮"诡计多端",又怀疑此次退兵乃是诱敌之计,于是命令部队后撤,观察蜀军动向。姜维趁司马懿退兵的大好时机,马上指挥主力部队,迅速安全转移,撤回汉中。等司马懿得知诸葛亮已死,再进兵追击,为时已晚。相信这个故事,大家在大型连续剧《三国演义》里已经看过了。呵呵,只是没有理解得这么深入罢了!而在黑客入侵技术中,金蝉脱壳则是指: 删除系统运行日志 攻击者攻破系统后,常删除系统运行日志,隐藏自己的痕迹…呵呵 二、壳,脱壳,加壳 在自然界中,我想大家对壳这东西应该都不会陌生了,由上述故事,我们也可见一斑。自然界中植物用它来保护种子,动物用它来保护身体等等。同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。就像动植物的壳一般都是在身体外面一样理所当然 (但后来也出现了所谓的"壳中带籽"的壳) 。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为"壳"了。就像计算机病毒和自然界的病毒一样,其实都是命名上的方法罢了。 从功能上抽象,软件的壳和自然界中的壳相差无几。无非是保护、隐蔽壳内的东西。而从技术的角度出发,壳是一段执行于原始程序前的代码。原始程序的代码在加壳的过程中可能被压缩、加密……。当加壳后的文件执行时,壳-这段代码先于原始程序运行,他把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。 软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP (入口点,防止被破解) 。关于"壳"以及相关软件的发展历史请参阅吴先生的《一切从"壳"开始》。 壳的概念 作者编好软件后,编译成exe可执行文件。 1.有一些版权信息需要保护起来,不想让别人随便改动,如作者的姓名,即为了保护软件不被破解,通常都是采用加壳来进行保护。 2.需要把程序搞的小一点,从而方便使用。于是,需要用到一些软件,它们能将exe可执行文件压缩, 3.在黑客界给木马等软件加壳脱壳以躲避杀毒软件。实现上述功能,这些软件称为加壳软件。 (二) 加壳软件最常见的加壳软件 ASPACK ,UPX,PEcompact 不常用的加壳软件WWPACK32;PE-PACK ;PETITE NEOLITE (三) 侦测壳和软件所用编写语言的软件 因为脱壳之前要查他的壳的类型。 1.侦测壳的软件fileinfo.exe 简称fi.exe (侦测壳的能力极强) 。 2.侦测壳和软件所用编写语言的软件language.exe (两个功能合为一体,很棒) ,推荐language2000中文版 (专门检测加壳类型) 。 3.软件常用编写语言Delphi,VisualBasic (VB) -最难破,VisualC (VC) 。 (四) 脱壳软件 软件加壳是作者写完软件后,为了保护自己的代码或维护软件产权等利益所常用到的手段。目前有很多加壳工具,当然有盾,自然就有矛,只要我们收集全常用脱壳工具,那就不怕他加壳了。软件脱壳有手动脱和自动脱壳之分,下面我们先介绍自动脱壳,因为手动脱壳需要运用汇编语言,要跟踪断点等,不适合初学者,但我们在后边将稍作介绍。 加壳一般属于软件加密,现在越来越多的软件经过压缩处理,给汉化带来许多不便,软件汉化爱好者也不得不学习掌握这种技能。现在脱壳一般分手动和自动两种,手动就是用TRW2000、TR、SOFTICE等调试工具对付,对脱壳者有一定水平要求,涉及到很多汇编语言和软件调试方面的知识。而自动就是用专门的脱壳工具来脱,最常用某种压缩软件都有他人写的反压缩工具对应,有些压缩工具自身能解压,如UPX;有些不提供这功能,如: ASPACK,就需要UNASPACK对付,好处是简单,缺点是版本更新了就没用了。另外脱壳就是用专门的脱壳工具来对付,最流行的是PROCDUMP v1.62 ,可对付目前各种压缩软件的压缩档。在这里介绍的是一些通用的方法和工具,希望对大家有帮助。我们知道文件的加密方式,就可以使用不同的工具、不同的方法进行脱壳。下面是我们常常会碰到的加壳方式及简单的脱壳措施,供大家参考: 脱壳的基本原则就是单步跟踪,只能往前,不能往后。脱壳的一般流程是: 查壳->寻找OEP->Dump->修复 找OEP的一般思路如下: 先看壳是加密壳还是压缩壳,压缩壳相对来说容易些,一般是没有异常,找到对应的popad后就能到入口,跳到入口的方式一般为。 我们知道文件被一些压缩加壳软件加密,下一步我们就要分析加密软件的名称、版本。因为不同软件甚至不同版本加的壳,脱壳处理的方法都不相同。 常用脱壳工具: 文件分析工具 (侦测壳的类型) : Fi,GetTyp,peid,pe-scan, OEP入口查找工具: SoftICE,TRW,ollydbg,loader,peid dump工具: IceDump,TRW,PEditor,ProcDump32,LordPE PE文件编辑工具PEditor,ProcDump32,LordPE ...

2014-03-20 · 1 min · 154 words · -

Android APK加壳技术方案

Android APK加壳技术方案 本文章由Jack_Jia编写,转载请注明出处。 文章链接: http://blog.csdn.net/jiazhijun/article/details/8678399 作者: Jack_Jia 邮箱: 309zhijun@163.com 一、什么是加壳? 加壳是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作。大多数病毒就是基于此原理。PC EXE文件加壳的过程如下: 二、加壳作用 加壳的程序可以有效阻止对程序的反汇编分析,以达到它不可告人的目的。这种技术也常用来保护软件版权,防止被软件破解。 三、Android Dex文件加壳原理 PC平台现在已存在大量的标准的加壳和解壳工具,但是Android作为新兴平台还未出现APK加壳工具。Android Dex文件大量使用引用给加壳带来了一定的难度,但是从理论上讲,Android APK加壳也是可行的。 在这个过程中,牵扯到三个角色: 加壳程序: 加密源程序为解壳数据、组装解壳程序和解壳数据 解壳程序: 解密解壳数据,并运行时通过DexClassLoader动态加载 源程序: 需要加壳处理的被保护代码 阅读该文章,需要您对DEX文件结构有所了解,您可以通过以下网址了解相关信息: http://blog.csdn.net/jiazhijun/article/details/8664778 根据解壳数据在解壳程序DEX文件中的不同分布,本文将提出两种Android Dex加壳的实现方案。 (一) 解壳数据位于解壳程序文件尾部 该种方式简单实用,合并后的DEX文件结构如下。 加壳程序工作流程: 加密源程序APK文件为解壳数据 把解壳数据写入解壳程序Dex文件末尾,并在文件尾部添加解壳数据的大小。 修改解壳程序DEX头中checksum、signature 和file_size头信息。 修改源程序AndroidMainfest.xml文件并覆盖解壳程序AndroidMainfest.xml文件。 解壳DEX程序工作流程: 读取DEX文件末尾数据获取借壳数据长度。 从DEX文件读取解壳数据,解密解壳数据。以文件形式保存解密数据到a.APK文件 通过DexClassLoader动态加载a.apk。 (二) 解壳数据位于解壳程序文件头 该种方式相对比较复杂, 合并后DEX文件结构如下: 加壳程序工作流程: 加密源程序APK文件为解壳数据 计算解壳数据长度,并添加该长度到解壳DEX文件头末尾,并继续解壳数据到文件头末尾。 (插入数据的位置为0x70处) 修改解壳程序DEX头中checksum、signature、file_size、header_size、string_ids_off、type_ids_off、proto_ids_off、field_ids_off、 method_ids_off、class_defs_off和data_off相关项。 分析map_off 数据,修改相关的数据偏移量。 修改源程序AndroidMainfest.xml文件并覆盖解壳程序AndroidMainfest.xml文件。 解壳DEX程序工作流程: 从0x70处读取解壳数据长度。 从DEX文件读取解壳数据,解密解壳数据。以文件形式保存解密数据到a.APK 通过DexClassLoader动态加载a.APK。 四、加壳及脱壳代码实现 http://blog.csdn.net/jiazhijun/article/details/8809542

2014-03-20 · 1 min · 62 words · -

Android程序的反破解技术

Android程序的反破解技术 http://blog.csdn.net/viviwen123/article/details/9117589 逆向Android软件的步骤: 首先是对其进行反编译,然后阅读反汇编代码,如果有必要还会对其进行动态调试,找到突破口后注入或直接修改反汇编代码,最后重新编译软件进行测试。整个过程可分为反编译、静态分析、动态调试、重编译等4个环节。反破解技术也是从这四个方面进行的。 一、对抗反编译工具 (如ApkTool、BackSmali、dex2jar) ,使其无法进行反编译,或者反编译后无法得到软件正确的反汇编代码。 思路是: 寻找反编译工具在处理apk或dex文件时的缺陷,然后在自己的软件中加以利用。主要方法有: 阅读反编译工具源码。 压力测试。测试大量apk文件,找到反编译工具反编译不了的,分析其特征。 此方法难度较大,而且反编译工具不断升级,方法容易过时,因此不太建议。 二、对抗静态分析。 代码混淆技术: Android2.3的SDK中正式加入了ProGuard代码混淆工具,开发人员可以使用该工具对自己的代码进行混淆。Android2.3以前的项目同样可以使用此工具。 NDK保护。 外壳保护。java由于其语言自身特殊性,没有外壳保护这个概念,只能通过混淆方式对其进行保护。外壳保护重点针对使用NDK编写的Native代码,逆向Native本身就已经够困难了,如果添加了外壳保护则更是难上加难,目前已知可用于ARM Linux内核程序的加壳工具只有upx。 三、对抗动态调试。 检测调试器: 动态调试使用调试器来挂钩软件,获取软件运行时的数据,我们可以在软件中加入检测调试器的代码,当检测到软件被调试器连接时,中止软件的运行。 首先,在AndroidManifest.xml文件的Application标签中加入android:debuggable=“false”,让程序不可调试,这样,如果别人想调试该程序,就必然会修改它的值,我们在代码中检查它的值来判断程序是否被修改过。代码如下: if (0!=(getApplicationInfo().flags&=ApplicationInfo.FLAG_DEBUGGABLE)) { Log.e("DEBUG", "程序被修改为可调试状态!!!"); android.os.Process.killProcess(android.os.Process.myPid()); } 另外,Android SDK中提供了一个方法方便程序员来检测调试器是否已经连接,代码如下: android.os.Debug.isDebuggerConnected() 如果方法返回真,说明了调试器已经连接。我们可以随机地在软件中插入这行代码来检测调试器,碰到有调试器连接就果断地结束程序运行。 检测模拟器。 软件发布后会安装到用户的手机中运行,如果有发现软件运行在模拟器中,很显然不合常理,可能是有人试图破解或分析它,这种情况我们必须予以阻止。 模拟器与真实的Android手机有许多差异,我们可以在命令提示符下执行"adb shell getprop"查看并对比它们的属性值,经过对比发现如下几个属性值可以用来判断软件是否运行在模拟器中: ro.product.model、ro.build.tag、ro.kernel.qemu。编写检测代码如下: boolean isRunningInEmualtor() { boolean qemuKernel = false; Process process = null; DataOutputStream os = null; try{ process = Runtime.getRuntime().exec("getprop ro.kernel.qemu"); os = new DataOutputStream(process.getOutputStream()); BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(),"GBK")); os.writeBytes("exit\n"); os.flush(); process.waitFor(); qemuKernel = (Integer.valueOf(in.readLine()) == 1); Log.d("com.droider.checkqemu", "检测到模拟器:" + qemuKernel); } catch (Exception e){ qemuKernel = false; Log.d("com.droider.checkqemu", "run failed" + e.getMessage()); } finally { try{ if (os != null) { os.close(); } process.destroy(); } catch (Exception e) { } Log.d("com.droider.checkqemu", "run finally"); } return qemuKernel; } public static String getProp(Context context, String property) { try { ClassLoader cl = context.getClassLoader(); Class SystemProperties = cl.loadClass("android.os.SystemProperties"); Method method = SystemProperties.getMethod("get", String.class); Object[] params = new Object[1]; params[0] = new String(property); return (String)method.invoke(SystemProperties, params); } catch (Exception e) { return null; } } 四、防止重编译。 ...

2014-03-20 · 2 min · 260 words · -

APK保护技术

APK保护技术 http://my.eoe.cn/1177576/archive/10575.html 由于Java字节码的抽象级别较高,因此Android的APK较容易被反编译,而国内对于网络产品保护不力。如果一款应用APK被破解,那么可能会被他人植入广告或者病毒以供他人盈利或窃取用户信息;如果一款游戏APK被破解,那么这款游戏可能会从收费版变成免费版,游戏的支付系统也形同虚设。不管是哪种情况,对于开发者来说,APK被破解绝对是一场噩梦,而自己手动设置各种加密不但耗时耗力,而且不一定能收到很好的效果。本文介绍几种常用的方法,用于保护Java字节码不被反编译。通常,这些方法不能够绝对防止程序被反编译,而是加大反编译的难度而已,因为这些方法都有自己的使用环境和弱点。 1.隔离Java程序 最简单的方法就是让用户不能够访问到Java Class程序,这种方法是最根本的方法,具体实现有多种方式。例如,开发人员可以将关键的Java Class放在服务器端,客户端通过访问服务器的相关接口来获得服务,而不是直接访问Class文件。这样黑客就没有办法反编译Class文件。目前,通过接口提供服务的标准和协议也越来越多,例如 HTTP、Web Service、RPC等。但是有很多应用都不适合这种保护方式,例如对于单机运行的程序就无法隔离Java程序。 2.对Class文件进行加密 2 为了防止Class文件被直接反编译,许多开发人员将一些关键的Class文件进行加密,例如对注册码、序列号管理相关的类等。在使用这些被加密的类之前,程序首先需要对这些类进行解密,而后再将这些类装载到JVM当中。这些类的解密可以由硬件完成,也可以使用软件完成。 在实现时,开发人员往往通过自定义ClassLoader类来完成加密类的装载(注意由于安全性的原因,Applet不能够支持自定义的ClassLoader)。自定义的ClassLoader首先找到加密的类,而后进行解密,最后将解密后的类装载到JVM当中。在这种保护方式中,自定义的ClassLoader是非常关键的类。由于它本身不是被加密的,因此它可能成为黑客最先攻击的目标。如果相关的解密密钥和算法被攻克,那么被加密的类也很容易被解密。 3.转换成本地代码 将程序转换成本地代码也是一种防止反编译的有效方法。因为本地代码往往难以被反编译。开发人员可以选择将整个应用程序转换成本地代码,也可以选择关键模块转换。如果仅仅转换关键部分模块,Java程序在使用这些模块时,需要使用JNI技术进行调用。当然,在使用这种技术保护Java程序的同时,也牺牲了Java的跨平台特性。对于不同的平台,我们需要维护不同版本的本地代码,这将加重软件支持和维护的工作。不过对于一些关键的模块,有时这种方案往往是必要的。为了保证这些本地代码不被修改和替代,通常需要对这些代码进行数字签名。在使用这些本地代码之前,往往需要对这些本地代码进行认证,确保这些代码没有被黑客更改。如果签名检查通过,则调用相关JNI方法。 4.代码混淆 代码混淆是对Class文件进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能(语义)。但是混淆后的代码很难被反编译,即反编译后得出的代码是非常难懂、晦涩的,因此反编译人员很难得出程序的真正语义。从理论上来说,黑客如果有足够的时间,被混淆的代码仍然可能被破解,甚至目前有些人正在研制反混淆的工具。但是从实际情况来看,由于混淆技术的多元化发展,混淆理论的成熟,经过混淆的Java代码还是能够很好地防止反编译。下面我们会详细介绍混淆技术,因为混淆是一种保护Java程序的重要技术。 5.在线加密 APK Protect(http://www.apkprotect.com/)是一个在线对APK程序进行加密的网站,可以支持Java和C+ +语言的保护,能达到反调试、反编译的效果,操作过程简单易用: 仅需上传你的APK,选择加密项目,等待服务器加密 (通常一两个小时左右) 后即可下载加壳的APK,然后再签名上传到应用市场即可。经测试,通过APK Protect加密的APK变得非常难以破解,从而保护了APK。 from eoe.cn

2014-03-20 · 1 min · 27 words · -

favicon

favicon 获取网站favicon http://www.google.com/s2/favicons?domain=google.com home.html 代码如下: 下面两行代码就可以告诉浏览器使用wangyi.ico 作为home.html的图标了:

2014-03-19 · 1 min · 7 words · -

outlook2010邮件签名

outlook2010 邮件签名 outlook2010邮件签名并自动更新日期时间的方法: 菜单-文件->选项->邮件->创建或修改邮件的签名: 按钮 签名->新建 此 致 致礼! 深圳市xxx有限公司: 研发部: 牛凯 地址: 深圳市xxx 固定电话: 0755-xxxx 联系手机: 137xxx 邮箱地址: 时间: { TIME @ “yyyy年M月d日星期 W” }{ TIME @ “H时m分” } 如何得到时间格式写法的参考? 1.开始->新建电子邮件->新窗口中: 插入->日期和时间->选择语言和格式,确定->可得到签名中想要的格式。 签名中设置自动更新时间的步骤: 1 在要插入日期的签名编辑中,按Ctrl + F9 出现域 { } , 2 在此域中输入大括号内的内容 { TIME @ “yyyy年M月d日星期 W” } 然后点保存编辑,ok了。 3 新建邮件中看不到日期时间只看到格式,但是发送出去的是自动更新的时间。

2014-03-19 · 1 min · 53 words · -

如何提问

如何提问 http://macshuo.com/?p=367 遇到问题不要急着问别人,在时间允许的情况下看是否自己能够解决,一方面锻炼自己分析问题和解决问题的能力,另一方面,一旦问题解决了,问题就不是问题,而是你的经验和知识库。况且现在互联网有那么多的技术资料和各类问答网站,想碰到一个别人没碰到的问题,已经非常困难了。 如果做了努力依然不能解决,或者客观条件不允许你自己解决了,那么首先要选择提问对象,不管是是现实中的大神,还是网络上的牛人,确保他是你所知道的最佳解决人选。 你需要一个好的标题,用清晰的短句描述你遇到的问题 至关重要的正文 (1) 用清晰的语言描述你遇到的问题 (2) 提供软件环境,包括操作系统、数据库等相关软件及其版本号 (3) 问题是否可以重现,采用什么方式重现 (4) 采用了什么措施解决问题,最终结果 (可提供日志、程序、截图等描述) (5) 尽可能提供问题相关的可分析文件,包括日志、截图和Core dump等 (6) 不要长篇大论,简明扼要,描述主要问题

2014-03-06 · 1 min · 20 words · -

ASCII

ASCII Dec Hex Char 10 0A LF 13 0D CR 32 20 Space 35 30 # 48 30 0 57 39 9 58 3A : 65 41 A 66 42 B 67 43 C 70 46 F 73 49 I 90 5A Z 97 61 a 101 65 e 102 66 f 115 73 s 122 7A z 124 7C | ASCII字符集,最基本的包含了128个字符。其中前32个,0-31,即0×00-0x1F,都是不可见字符。这些字符,就叫做控制字符。 这些字符没法打印出来,但是每个字符,都对应着一个特殊的控制功能的字符,简称功能字符或功能码Function Code。 简言之: ASCII中前32个字符,统称为Function Code功能字符。 此外,由于ASCII中的127对应的是Delete,也是不可见的,所以,此处根据笔者的理解,也可以归为Function Code。 此类字符,对应不同的"功能",起到一定的"控制作用",所以,称为控制字符。 ...

2014-03-05 · 1 min · 79 words · -

AppImage

AppImage AppImage 是一种在 Linux 系统中用于分发便携式软件而不需要超级用户权限来安装它们的格式。 它还试图允许 Linux 的上游开发者来分发他们的程序而不用考虑不同 Linux 发行版间的区别。 AppImage的核心思想是一个文件即一个应用程序 。 每个 AppImage 都包含应用程序以及应用程序运行所需的所有文件。换句话说,除了操作系统本身的基础组件,Appimage 无需依赖即可运行。 在 2004 年,它以 klik 的名字发布。自那时起,它就被不断地开发,并在 2011 年被重新命名为 PortableLinuxApps,在2013年被重新命名为 AppImage。 运行方法 添加可执行权限 chmod a+x .AppImage 执行它! ./.AppImage https://doc.appimage.cn/docs/appimage/

2014-03-04 · 1 min · 33 words · -

golang http 文件下载

golang http 文件下载 golang + gin c.Writer.WriteHeader(http.StatusOK) c.Header("Content-Disposition", fmt.Sprintf("attachment; filename=%s.bin", "foo")) c.Header("Content-Type", "application/octet-stream") c.Header("Content-Transfer-Encoding", "binary") c.Header("Accept-Ranges", "bytes") c.Header("Connection", "keep-alive") c.Header("Content-Length", fmt.Sprintf("%d", len(paramsBytes))) c.Writer.Write(paramsBytes) vuetify import fileDownload from 'js-file-download' exportCsv (): void { Axios.get('/export', { headers: { Authorization: 'Bearer ' + localStorage.getItem('JWT_TOKEN') }, params: { foo: this.foo, start: this.dateStart + ' ' + this.timeStart, end: this.dateEnd + ' ' + this.timeEnd }, responseType: 'blob' }).then(response => { const fileName = response.headers['content-disposition'].match(/filename=(.*)/)[1] console.log('data: ' + response.data) fileDownload(response.data, fileName) }).catch(error => { console.log({ error }) }) } http://blog.csdn.net/androidmylove/article/details/8881573 // Ajax 文件下载 jQuery.download = function(url, data, method){ // 获得url和data if( url && data ){ // data 是 string 或者 array/object data = typeof data == 'string' ? data : jQuery.param(data); // 把参数组装成 form 的 input var inputs = ''; jQuery.each(data.split('&'), function(){ var pair = this.split('='); inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ pair[1] +'" />'; }); // request发送请求 jQuery('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>') .appendTo('body').submit().remove(); }; }; 文章结束给大家分享下程序员的一些笑话语录: 一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星"而把地球当一个参数传进去。

2014-02-26 · 1 min · 159 words · -

电脑通过USB共享android手机网络访问Internet

电脑通过USB共享android手机网络访问Internet 打开手机USB绑定 【设置】->【无线和网络设置】->【绑定与便携式热点】->【USB绑定】 详细内容参见: https://support.google.com/android/answer/182134#usb 2.下载驱动安装信息 从android官网下载驱动程序信息文件 tetherxp.inf ( http://www.android.com/drivers/tetherxp.inf ) 3.使用手机附带的 USB 线连接手机与计算机。 4.Windows XP 的"新硬件向导"打开后,选择否,暂时不,然后点击下一步。 5.选择从列表或指定位置安装,然后点击下一步。 6.点击浏览,找到您在步骤 1 中下载的配置文件的安装目录,然后点击下一步。Windows XP 会使用该配置文件进行配置,以支持与 Android 手机进行 USB 网络共享。 7.在 Windows XP 安装完用于 Android USB 以太网/RNDIS 的软件后,点击完成。 http://blog.sina.com.cn/s/blog_570343830101ezix.html https://support.google.com/android/answer/182134#usb

2014-02-25 · 1 min · 37 words · -

内存数据库

内存数据库 内存数据库,顾名思义就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。 内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。内存数据库的最大特点是其"主拷贝"或"工作版本"常驻内存,即活动事务只与实时内存数据库的内存拷贝打交道。 定义:设有数据库系统DBS,DB为DBS中的数据库,DBM(t)为在时刻t,DB在内存的数据集,DBM(t)属于DB。TS为DBS中所有可能的事务构成的集合。AT(t)为在时刻t处于活动状态的事务集,AT(t)属于TS。Dt(T)为事务T在时刻t所操作的数据集, Dt(T)属于DB。若在任意时刻t,均有: 任意T属于AT(t) Dt(T)属于DBM(t) 成立,则称DBS为一个内存数据库系统,简称为MMDBS;DB为一个内存数据库,简称为MMDB。 常见的例子有MySQL的MEMORY存储引擎、eXtremeDB、TT、FastDB、SQLite、Microsoft SQL Server Compact,Redis http://baike.baidu.com/view/1210875.htm

2014-01-15 · 1 min · 13 words · -

OTF与TTF的区别

OTF与TTF的区别 TTF 扩展名的 O 图标的表示 OpenType - TrueType 字体, 采用的是 TrueType 曲线, 不过支持 OpenType 的高级特性. TTF 扩展名的 T 图标的表示 TrueType 字体, 采用的是 TrueType 曲线, 不支持 OpenType 特性. OTF 扩展名的 O 图标的表示 OpenType - PostScript 字体, 采用的是 PostScript 曲线, 支持 OpenType 高级特性. OpenType 是 Microsoft 与 Adobe 共同制定的标准, 在此之前有两大字体格式: TrueType 和 Type 1, 两家合作制定出的 OpenType 将之前的两大格式都包含了进去, TrueType 进化成 OpenType - TrueType, 在原有基础上增加了 OpenType 高级特性支持, 扩展名不变 (TTF), 图标由 T 变为 O; Type 1 进化成 OpenType - PostScript, 在原有基础上增加了 OpenType 高级特性支持, 扩展名定位 OTF, 图标为 O. ...

2014-01-08 · 1 min · 142 words · -

Windows 共享网络设置 (有线网络和无线网络)

Windows 共享网络设置 (有线网络和无线网络) 有线共享网络 打开连接 Internet 的 “本地连接 属性” 窗口,切换到“共享”标签页 在“共享” 标签页中,勾选 “允许其他网络用户通过此计算机的Internet连接来连接”,确定;如果网络连接中超过两个连接,则还需要选择需要共享的连接 打开另一个需要共享的连接的“本地连接 属性”窗口,选择“Internet 协议版本4 (TCP/IPV4)属性”,设置静态IP,这里的设置的IP网段应避开连接Internet的网段,否则易造成IP冲突等问题 这样配置后,这个网卡就想当于共享网络的网关,其他要共享此连接的电脑只需要设置将IP地址配置成同一网段与上述不同即可 (如192.168.71.2),其余配置不变 无线共享网络 无线共享在双网卡的情况下,用于共享需要是无线网卡,这里可以采用与上述相同的方式进行无线网络共享;当然也可使用如360出的免费360wifi,可以不用进行配置 如果进行上述配置后,各连接正常,但是无法访问Internet,则是由于Internet Connection Sharing(ICS)服务未启动。 右键“我的电脑”-》管理-》服务和应用程序-》服务-》双击Internet Connection Sharing(ICS)-》启动 双击Internet Connection Sharing(ICS)状态栏显示“已启动”即可 ———————————————— 版权声明:本文为CSDN博主「小蜗coding」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/acsder2010413/article/details/40395621

2014-01-01 · 1 min · 35 words · -

Yahei Consolas Hybrid

Yahei Consolas Hybrid https://github.com/crvdgc/Consolas-with-Yahei Yahei Consolas Hybrid 是一种合成字体,是由微软雅黑的中文字体和 Consolas 的英文字体合成的,Consolas 字体是微软专为程序员开发的一种字体,但没有中文支持,所以 Yahei Consolas Hybrid 这种字体特别适合中英文的编程开发,代码编写 git clone https://gitee.com/a42/YaHei-Consolas-Hybrid-1.12.git && sh YaHei-Consolas-Hybrid-1.12/setup.sh && cd - && rm -rf YaHei-Consolas-Hybrid-1.12 https://gitee.com/a42/YaHei-Consolas-Hybrid-1.12 https://github.com/yakumioto/YaHei-Consolas-Hybrid-1.12 http://blog.alphatr.com/yahei-consolas.html https://blog.alphatr.com/yahei-consolas.html Yahei Consolas Hybrid 是一种合成字体,是由微软雅黑的中文字体和 Consolas 的英文字体合成的,Consolas 字体是微软专为程序员开发的一种字体,但没有中文支持,所以 Yahei Consolas Hybrid 这种字体特别适合中英文的编程开发,代码编写 Yahei Consolas 下载安装: 下载地址: 点击下载 下载下来,打开压缩包直接双击字体文件,在系统自带的字体预览程序左上角点击安装,字体就被安装进去了,也可以直接粘贴到系统的字体文件夹 (%SystemRoot%\Fonts) 字体安装 使用方式: 这里以记事本为例,其他软件基本设置都差不多,打开 格式>字体…,弹出字体对话框,选择 Yahei Consolas Hybrid 字体,建议选择五号字体,点击确定 设置字体 下面是系统默认宋体和 Yahei Consolas Hybrid 的对比图 字体对比 PS: 建议安装字体渲染工具 GDI++(32位)、ezGDI(64位),这样字体会更美观

2013-12-27 · 1 min · 68 words · -

cpu 占用分析

cpu瓶颈分析 #系统的平均负载 uptime # 每个 CPU 的使用情况 mpstat # 每个进程 CPU 的使用情况 pidstat stress stress https://www.hi-linux.com/posts/59095.html https://www.infoq.cn/article/5jjIdOPx12RWWvGX_H9J?utm_source=rss&utm_medium=article http://9leg.com/java/2016/08/09/cpu-consumption-analysis.html 通常性能瓶颈的表现是资源消耗过多、外部处理系统的性能不足,或者资源消耗不多,但程序的响应速度却达不到要求。 资源主要消耗在cpu,io (又分文件io和网络io) ,内存方面,机器的资源是有限的,当某资源消耗过多时,通常会造成系统的响应速度变慢。 对于java应用而言,寻找性能瓶颈的方法通常为首先分析资源的消耗,然后结合java的一些工具来查找程序中造成资源消耗过多的代码。 今天先谈一谈cpu消耗如何分析,系统为linux,jdk为sun jdk。 在linux中,cpu主要用于中断、内核和用户进程的任务处理,优先级为中断>内核>用户进程,下面先讲述三个重要的概念。 上下文切换 每个cpu (多核cpu中的每个cpu) 在同一时间只能执行一个线程,linux采用的是抢占式调度。为每个线程分配一定的执行时间, 当到达执行时间、线程中有io阻塞或高优先级的线程要执行时,linux将切换执行的线程,在切换时要存储目前的线程的执行状态, 并恢复要执行的线程的状态,这个过程就是上下文切换。对于java应用而言,典型的是在进行文件io操作、网络io操作、锁等待或者线程sleep时, 当前线程会进入阻塞或休眠状态,从而触发上下文切换,上下文切换过多会造成内核占据较多的cpu使用,从而使应用响应速度变慢。 运行队列 每个cpu核都会维护一个可运行的线程队列,例如一个4核的cpu,java应用里启动了8个线程,且这8个线程都处于可运行状态, 那么在分配平均的情况下每个cpu中的运行队列就会有2个线程。通常而言,系统的load主要由cpu运行队列来决定。 利用率 cpu利用率为cpu在用户进程、内核、中断处理、io等待以及空闲5个部分使用的百分比,这5个值是用来分析cpu消耗的关键指标。 在linux中,可通过top或pidstat方式来查看进程中线程的cpu的消耗状况。 top 输入top命令后既可查看cpu的消耗情况,cpu的信息在top视图的上面几行中 对于多个或多核cpu,上面的显示则会是多个cpu所占用的百分比总合。如需查看每个核的消耗情况,可在进入top视图后按1,就会按核来显示消耗情况。 cpu-top 默认情况下,top视图中显示的为进程的cpu消耗状况,在top视图中按shift + h后,可按线程查看cpu的消耗状况,此时的pid既为线程id。 pidstat sy过高 当sy值过高时,表示linux花费了更多的时间在进行线程切换。java应用造成这种现象的主要原因是启动的线程比较多, 且这些线程多处于不断的阻塞 (例如锁等待,io等待) 和执行状态的变化过程中,这就导致了操作系统要不断的切换执行的线程, 产生大量的上下文切换。在这种情况下,对java应用而言,最重要的是找出不断切换状态的原因, 可采用的方法为通过kill -3 pid 或jstack -l pid的方法dump出java应用程序的线程信息,查看线程的状态信息以及锁信息, 找出等待状态或锁竞争过多的线程。 进程和线程的上下文切换都涉及进出系统内核和寄存器的保存和还原,这是它们的最大开销。但与进程的上下文切换相比,线程还是要轻量一些, 最大的区别是线程上下文切换时虚拟内存地址保持不变,所以像TLB等CPU缓存不会失效。但要注意的是另一份提问 What is the overhead of a context-switch?的中提到了: Intel和AMD在2008年引入的技术可能会使TLB不失效。 ...

2013-12-10 · 1 min · 72 words · -

墨菲定理

墨菲定理 墨菲定律是美国的一名工程师爱德华·墨菲作出的著名论断,亦称莫非定律、莫非定理、或摩菲定理,是西方世界常用的俚语。墨菲定律主要内容是: 事情如果有变坏的可能,不管这种可能性有多小,它总会发生。 “墨菲定律” (英文: Murphy’s Law) ,是一种心理学效应,由一个工程师提出,主要内容有四个方面: 一、任何事都没有表面看起来那么简单;二、所有的事都会比你预计的时间长;三、会出错的事总会出错;四、如果你担心某种情况发生,那么它就更有可能发生。 理论解释 “墨菲定律"的根本内容是"凡是可能出错的事有很大几率会出错”,指的是任何一个事件,只要具有大于零的机率,就不能够假设它不会发生。 在科学和算法方面,它与英文所谓的"worst-case scenario (最劣情形) “同义,数学上用大O符号来表示。例如,对插入排序来说,最劣情形即是要排序的阵列完全倒置,必须进行 n*(n-1) 次的置换才能完成排序。在实验上,证明了最劣情形不会发生,并不代表比它轻微的情形就不可能,除非能够很有信心的推论事件的概率分布是线型的。 在文化方面,它代表一种近似反讽的幽默,当作对日常生活中不满的排解。[1] 什么是墨菲定律?最简单的表达形式是"有可能出错的事情,就会出错 (Anything that can go wrong will go wrong) 。"爱德华·墨菲(Edward A. Murphy)是一名工程师,这句话迅速流传。经过多年,这一"定律"逐渐进入习语范畴,其内涵被赋予无穷的创意,出现了众多的变体,"[1]If anything can go wrong, it will.(会出错的,终将会出错)"、"笑一笑,明天未必比今天好。""东西越好,越不中用"、"别试图教猪唱歌,这样不但不会有结果,还会惹猪不高兴!" 墨菲定律的原句是这样的: If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it. (如果有两种选择,其中一种将导致灾难,则必定有人会作出这种选择。) 。 简单地说,墨菲定律就是: 看似一件事好与坏的几率相同的时候,事情都会朝着糟糕的方向发生。 墨菲定律的来源,是一个叫墨菲的空军上尉,他有一个经常会遇到倒霉事的同事。1949年的一天,墨菲开玩笑说: “如果一件事情有可能被弄糟,让他去做就一定会弄糟。“举个例子吧,比如你每天出门都带着雨伞,可总也不下雨。当你这一天不想再带伞出门时,则往往会赶上下雨。再比如你去排队买东西,窗口前有几条相同长度的队伍。这时,你所加入的队伍往往是最慢的。 http://baike.baidu.com/subview/440060/9859388.htm?fromtitle=%E5%A2%A8%E8%8F%B2%E6%B3%95%E5%88%99&fromid=3621432&type=syn

2013-12-09 · 1 min · 69 words · -

linux iwconfig wpasupplicant 命令行配置无线上网,wpa_supplicant

linux iwconfig wpasupplicant 命令行配置无线上网,wpa_supplicant install wpa supplicant sudo apt-get install wpasupplicant wpagui sudo pacman -S wpa_supplicant generate psk password wpa_passphrase SSID PASSWORD ##write to file wpa_passphrase SSID PASSWORD >> /etc/wpa_supplicant.conf ##connect sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf , 询问有关命令行配置无线网络的问题,受到启发,做了一点尝试,在这里留下帖子做个笔记。。 我的状况: Debian lenny , kernel 2.6.26-686 , opebox+tint2 网卡两块 Broadcom NetXtreme BCM5710 和 Intel Pro/Wireless 2200BG 步骤有三个: 连接到路由器 命令行 **代码:**iwconfig essid ap rate freq channel key ...

2013-12-01 · 2 min · 231 words · -

hostapd

hostapd 主页: http://w1.fi/hostapd/ hostapd是一个_IEEE 802.11的AP和IEEE 802.1X/WPA/WPA2/EAP/RADIUS验证器_.此页面用于怎么在linux系统下使用它.其他操作系统请参考hostapd主页 就Linux而言,老版本只能使用以下3个包 HostAP madwifi prism54 所有新的基于mac80211的驱动实现AP功能被hostapd’s nl80211 驱动支持 The mac80211 子系统将所有的master模式已经移到用户空间.通过hostapd去处理客户端验证,设置加密密钥,建立密钥转化策略,以及无线公共部分的其他方面. 由此,老的使用’iwconfig mode master’的方法已经不能使用了. 用户空间程序像hostapd目前使用netlink (the nl80211 driver)去创建master mode接口实现通信,monitor mode接口实现接收和发送管理框架 获得hostapd Using your distributions hostapd 在编译和安装你的拷贝之前尝试发行版本是很明智的.这将让你以后的干礼轻松,如果你的版本大于0.6.8或更新,你通过简单配置hostapd-minimal.conf文件来进行测试: change wlan0 to your wireless device interface=wlan0 driver=nl80211 ssid=test channel=1 如果上述配置出现以下错误: hostapd $ sudo hostapd ./hostapd-minimal.conf Configuration file: ./hostapd-minimal.conf Line 2: invalid/unknown driver ’nl80211' 1 errors found in configuration file ‘./hostapd-minimal.conf’ 那就意味着你的hostapd不支持nl80211,你将需要按以下操作编译。如果正常,你可以跳转到配置hostapd章节 下载和编译hostpad 使用基于nl80211的hostapd需要你有至少libnl-1.0 pre8或更新的 genl版本,nl80211依赖Generic Netlink. 大多数发行版都自带有这个或者更新的.在fedora或其它开发包和安装包分开发行版编译 _时,你需要libnl-devel 包 ...

2013-12-01 · 4 min · 814 words · -