
ãªããŒã¹ãšã³ãžãã¢ã®ç«å Žã§è·åèšè¿°æžãèŠããšãããã§ã®JavaScriptã®ç¥èã«å¯ŸããéèŠãæºããããšã¯ã§ããŸããã ãããŠãäŒã£ããããšã¯ã¹ããã€ãããã¯ã§äžè¬çã«äœ¿çšãããããŸããŸãªæªæã®ããããŒãžã®é£èªå解é€ã®ã³ã³ããã¹ãã§ã®ã¿ã
ãŸããJSïŒäžéšã¯Webã¢ã»ã³ãã©ãŒãšåŒã°ããããšããããŸãïŒãšãã¢ã»ã³ãã©ãŒãå é ã«ããäœã¬ãã«ã®äžçãšã®å ±åãå¯èœã§ããïŒ
WebããŒã¿ã«ã次ã®å ŽåïŒ
- HEXãšãã£ã¿ãŒ
- ã¢ã»ã³ãã©ãŒ
- éã¢ã»ã³ãã©ãŒ ïŒ Cenigma ã ODA ã Radare2 Cloud ïŒ
- éã³ã³ãã€ã©ïŒ Retargetable Decompiler ïŒ
- ãšãã¥ã¬ãŒã¿ãŒ
- ããŒãã£ã©ã€ã¶ãŒ
- ãªã©
ãã®èšäºã§ã¯ãæ¬åœã«èå³æ·±ãæçšãªãããžã§ã¯ãã玹ä»ããããšæããŸãïŒããã«ããªããŒã¹ãšã³ãžãã¢ãªã³ã°ã¿ã¹ã¯ã®ããã«JSãå匷ããããšã¯ã§ããŸããïŒã
ããŒããã£ããã¹ããŒã³
æè¿ã Capstoneå解ãã¬ãŒã ã¯ãŒã¯ãèªçããŸããã ãã®ãããžã§ã¯ãã¯ããã«ã³ãã¥ããã£ã®æ¯æãšå€§äººæ°ãåŸãŸããã ããã¯ç解ã§ããŸãïŒäœ¿ãããããããã«å€æ°ã®ã¢ãŒããã¯ãã£ããµããŒãããŸãïŒARMãARM64ïŒARMv8ïŒãMIPSãPowerPCãSPARCãWindowsããã³* nixïŒMac OSXãiOSãAndroidãLinuxã* BSDããã³SolarisïŒã æéã®çµéãšãšãã«ããã¬ãŒã ã¯ãŒã¯ã¯ããŸããŸãªèšèªã®ãã€ã³ãã£ã³ã°ãååŸãããã§ã«PythonãRubyãCïŒãJavaãGOãC ++ãOCamlãValaãNodeJSããããŸãã ã¯ãNodeJSïŒ
ãã€ã³ãã£ã³ã°èªäœã¯æ¬¡ã®ãšããã§ããgithub.com / parasyte / node-capstone
ããã¯ãx86ã¢ãŒããã¯ãã£ã®64ãããã³ãŒãã®éã¢ã»ã³ããªãçºçããã³ãŒããšãã³ã³ãœãŒã«ãžã®ãã®åŸã®åºåã®äŸã§ãã
var capstone = require("capstone"); var code = new Buffer([ 0x55, 0x48, 0x8b, 0x05, 0xb8, 0x13, 0x00, 0x00 ]); var cs = new capstone.Cs(capstone.ARCH_X86, capstone.MODE_64); cs.detail = true; cs.disasm(code, 0x1000).forEach(function (insn) { console.log( "0x%s:\t%s\t%s\t%s", insn.address.toString(16), insn.mnemonic, insn.op_str, JSON.stringify(insn.detail) ); }); cs.close();
pe.js
github.com/mihailik/pe.js

ãã©ãŠã¶ã®ãšã¯ã¹ããã€ããäœæããããã»ã¹ã§ã¯ãå€ãã®å Žåãã¢ãã¬ã¹ãªãŒã¯ãASLRããã€ãã¹ããããã«äœ¿çšãããASLRã¯ROPãã§ãŒã³ã®æ§ç¯ã«äœ¿çšãããŸãã ç¹å®ã®é¢æ°ãåŒã³åºãå¿ èŠãããããã³ãŒãå ã§çºçããªãå Žåã¯ãå¥ã®æäœãè¡ãããŸãã å¿ èŠãªDLLã®å§ãŸããèšç®ããŠè§£æããŸãã ãããè¡ãã«ã¯ãç¹ã«PE圢åŒãšã€ã³ããŒãããŒãã«ã解æã§ããJavaScriptã³ãŒãããããšäŸ¿å©ã§ãã ããã§ãã®ãããªç®çã®ããã«pe.jsã
ãŸãããŸãã¯çŽç²ãªJavaScriptã®exeãã¡ã€ã«ã®ææè ãšããŠã 次ã«äŸã瀺ããŸãïŒ alive-green.blogspot.ru/2014/03/js-javascript.html
ãµã€ã¯ãªãã
www.cycript.org
cycriptã¯ãæåãªJay FreemanïŒsaurikïŒã®ããŒã«ã§ãã å®è¡æã«Mac OS XãŸãã¯iOSã§ã¢ããªã±ãŒã·ã§ã³ã衚瀺ããã³å€æŽã§ããŸãã ãããã¯ãã¹ãŠãæ§æObjective-C ++ããã³JavaScriptã䜿çšãããã€ããªããèšèªã§ã³ã³ãœãŒã«ãä»ããŠå¯Ÿè©±ãããšãã«çºçããŸãïŒã¹ã¯ãªããã®èµ·åãååšããŸãïŒã
ãŸãã Substrateãšããåãããæ©äŒããããŸããããã¯ãé¢æ°ã€ã³ã¿ãŒã»ãããå®è£ ããããããã°ã«èšé²ãããã©ã¡ãŒã¿ãŒãŸãã¯çµæãå€æŽãããšãã«éåžžã«äŸ¿å©ã§ãã å€ãã®å Žåãããã°ã©ã ã®åäœãŸãã¯ãã¡ãžã³ã°ã調æ»ãããšãã«äœ¿çšãããŸãã
iOSã§cycriptã䜿çšããäŸã次ã«ç€ºããŸããããã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ããç¹å®ã®ã¯ã©ã¹ã®ãªããžã§ã¯ãã®å€ã衚瀺ããŠããŸãã

ãŸãã¯ããããããæãäžè¬çãªcycripté¢æ°ã¯ãç¹å®ã®ã¯ã©ã¹ã®ãã¹ãŠã®é¢æ°åãšãã®å®è£ ã®ã¢ãã¬ã¹ã®åºåã§ãã
function printMethods(className) { var count = new new Type("I"); var methods = class_copyMethodList(objc_getClass(className), count); var methodsArray = []; for(var i = 0; i < *count; i++) { var method = methods[i]; methodsArray.push({selector:method_getName(method), implementation:method_getImplementation(method)}); } free(methods); free(count); return methodsArray; }
ãã®ã©ã€ãã©ãªã䜿çšãããšãã€ã³ã¿ãŒãããäžã§å€ãã®ããã¥ã¢ã«ãæ€çŽ¢ããããHabréã§äœ¿çšããããã®ãªãã¡ã¬ã³ã¹ãèŠã€ããããšãã§ããŸãã
ããšãã°ããã®ããŒã«ã§ã¯ã iNalyzerãšãããã¬ãŒã ã¯ãŒã¯ãæ§ç¯ãããŸããããã¯ãiOSã¢ããªã±ãŒã·ã§ã³ããã©ãã¯ããã¯ã¹ã§ãã¹ããããšãã«ãã䜿çšãããŸãã
ããªãŒãRE
www.frida.re

Fridaã䜿çšãããšãWindowsãLinuxãMacãAndroidãiOSãã©ãããã©ãŒã ã®ã¢ããªã±ãŒã·ã§ã³ã«JavaScriptã³ãŒããæ¿å ¥ã§ããŸãã ã¢ãŒããã¯ãã£ã«é¢ããŠã¯ãåœç¶x86 / x64 / ARM / AArch64ã§ãã ãã®ããŒã«ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³å ã®JSã§ç¬èªã®ã¹ã¯ãªãããå®è¡ã§ããŸãïŒé¢æ°ã®ã€ã³ã¿ãŒã»ããããããã®ã©ãããŒã®äœæãå ¥å/åºåãã©ã¡ãŒã¿ãŒã®çœ®æããŸãã¯èª¿æ»äžã®ã¢ããªã±ãŒã·ã§ã³ããã®ç¹å®ã®é¢æ°ã®åŒã³åºããªã©ãããã¯ãã¹ãŠã§ã¯ãããŸããã ãããã£ãŠããªã¹ããããŠãããã¹ãŠã®OSã§åãã³ãŒããã»ãšãã©å€æŽããã«äœ¿çšã§ããŸãã Androidã«ã€ããŠã¯ãVM Dalvikã§ã®äœæ¥ããµããŒããããŠããããã€ãã£ãé¢æ°ã ãã§ãªãJavaã§èšè¿°ãããé¢æ°ã§ãäœæ¥ã§ããŸãã OS Xããã³iOSã®Objective-Cã³ãŒãã«ã€ããŠãåãããšãèšããŸãã
Fridaã³ã¢ã¯Cã§èšè¿°ãããŠããããã®äœæ¥ã®ããã«ãGoogle V8ãšã³ãžã³ãã¿ãŒã²ããããã»ã¹ã«æ³šå ¥ããŸããããã«ãããããã»ã¹ã¡ã¢ãªå šäœãžã®ãã«ã¢ã¯ã»ã¹ã§JSã³ãŒããå®è¡ãããã¢ããªã±ãŒã·ã§ã³ãšå¯Ÿè©±ããããã®åæ¹åãã£ãã«ãç·šæãããŸãã
Fridaã«ã¯sendãresvãpost_messageãªã©ã®ã¯ãŒã«ãªæ©èœããããã¿ãŒã²ããã¢ããªã±ãŒã·ã§ã³å ã§æ¢ã«å®è¡ãããŠããJSã³ãŒããšéä¿¡ã§ãããããå éšã§ã³ãŒãã®åäœãã€ã³ã¿ã©ã¯ãã£ãã«å€æŽã§ããŸãã ããšãã°ãã¡ã¢ãªå ã®ç¹å®ã®è¡ãæ€çŽ¢ããŠã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã«æ¿å ¥ããJSã³ãŒããäœæããŸããã ãã®åŸãæåã«ãã°ã€ã³ãèªèšŒåŸã«ã¡ã¢ãªã«æ®ã£ãŠãããã©ããã確èªãã次ã«ãã¹ã¯ãŒããŸãã¯ä»ã®è¡ã確èªããŠãJSã¹ã¯ãªããã«éä¿¡ããŸãã ãŸãããã¡ãããçããåŸããæ£ããè¡ãèŠã€ãããŸãããã©ããã
ããã§ã¯ãããšãã°ãçµã¿èŸŒã¿é¢æ°enumerate_modulesïŒïŒã®ã³ãŒãã®ããã«èŠããŸãããã®é¢æ°ã¯ãPythonãã€ã³ãã£ã³ã°ã§ãããã»ã¹ã«ããŒããããã©ã€ãã©ãªããªã¹ããã圹å²ãæãããŸãã

ãŸãã¯ãé¢æ°ãint funcãããã¿ã€ãïŒint valãchar * strïŒã§ãã°ã«èšé²ããã³ãŒãã¯æ¬¡ã®ãšããã§ãã
script = process.session.create_script(""" Intercrptor.attach(ptr("%s"), { onEnter: function(args){ send({info:'onEnter', val:args[0].toInt32(), str:Memory.readUtf8String(args[1])}); }, onLeave: function(retval){ send({info:'onLeave', retval: retval.toInt32()}); } }); """ % addr
ãã®ãã¬ãŒã ã¯ãŒã¯ã¯ã2013幎ã®Hackito Ergo Sumã«ã³ãã¡ã¬ã³ã¹ã§åããŠçºè¡šãããçŸåšã§ã¯ååã«ãµããŒããããæŽæ°ãããŠããŸãã ãã§ã«iOS 8.1ããã³ARM64ã¢ãŒããã¯ãã£ã®ãµããŒãããããŸãã ãããŠãããã¯ãããããã®ã¬ãã¥ãŒã§æãèå³æ·±ããããžã§ã¯ãã§ãã
ããããª
github.com/pablosole/pet
ãã®ãããžã§ã¯ãã¯ããªãŒããããæ©ãç»å Žããç 究äžã®ããã°ã©ã ã«V8ãšã³ãžã³ãæ³šå ¥ãããšããã¢ã€ãã¢ãå®è£ ããŸããã EkoParty 2012ã«ã³ãã¡ã¬ã³ã¹ã§çºè¡šãããŸããããããªãŒããšã¯ç°ãªãã圌ã¯ã³ãã¥ããã£ããéçºãšãµããŒããåããããšã¯ãããŸããã§ããã ãããããœãŒã¹ã³ãŒããå ¬éãããŠããã誰ã§ã奜ããªããã«ãããžã§ã¯ããéçºãç¶ããããšãã§ããã®ã§ãèšåãã䟡å€ããããšæããŸãã
Pinocchioã§ã¯ããã¹ãŠã®PINæ©èœãJavaScriptã§å®è£ ã§ããV8ãšã³ãžã³ã«åºã¥ããŠããŸãã DBIïŒDynamic Binary InstrumentationïŒãšPINãã¬ãŒã ã¯ãŒã¯ã«ã€ããŠã¯ããã§ã«æžããŸãã ã PINèªäœã¯éæ¢ããŠããããéçºäžã§ãã ããããªã«ã§ããããšã¯ããã«ãããŸã ã
æ°ããã¢ãžã¥ãŒã«ãããŒãããããã°ã©ã ã§æ°ããã¹ã¬ãããäœæãããšãã«ã€ãã³ããåŠçãããµã³ãã«ã³ãŒãïŒ
function newimage(img) { log(img.name + â â â + img.loadOffset.hex()); } function newthread(threadId, ctx, flags) { log(âNew Thread â + current.thread.tid); log(âThread Stack:â + ctx.get(REG_ESP).hex()); } events.attach(âloadimageâ, newimage); events.attach(âstartthreadâ, newthread);
ãã®ããŒã«ã¯ãWindowsãšIA32ã®ã¿ããµããŒãããããã«ãªããŸããã
楜åšã«é¢ãã詳现ãªãã¬ãŒã³ããŒã·ã§ã³ïŒã¹ãã€ã³èªïŒïŒ www.ekoparty.org//archive/2012/Pin%20para%20Todos%20y%20Todas.pdf
IDA_JScript
github.com/dzzie/RE_Plugins/tree/master/IDA_JScript

é転ã«ã€ããŠè©±ããŠããå Žåã¯ãIDA Proã䜿çšããªãã§ãã ããã C / C ++ã IDC ãPythonïŒ IDAPython ïŒãRubyïŒ idarub ïŒã Perl ãJavaïŒ idajava ïŒãOcamlïŒ idaocaml ïŒãªã©ãããŸããŸãªçšåºŠã®å©äŸ¿æ§ãåããã¹ã¯ãªãããèšå€§ãªæ°ã®èšèªã§äœæã§ããŸãã ãã¡ãããäžéšã®ãã€ã³ãã£ã³ã°ã¯ææ°ã®ãã®ãšã¯ã»ã©é ããã®ã§ãã
JavaScriptãäŸå€ã§ã¯ãããŸããïŒ IDA_JScript ã
ãã¡ãããç§ã¯å€ãã®äººã ãç©æ¥µçã«ããã䜿çšããŠããããšãçããŸãããååšã®äºå®ã¯éåŒã§ãã ããªãã¯ããã䜿çšããããšãã§ããŸããããããç¶æ/æŽæ°ããå¿ èŠããããŸãã
ããã¯ãã³ãŒããç¹å®ã®ç¯å²å ã®ãã¹ãŠã®ãŠãŒã¶ãŒå®çŸ©åãååŸããæ¹æ³ã§ãã
s = 0x09A47A8 e = 0x09A5ACE if(s.length==0 || e.length == 0){ throw "invalid inputs" } s = parseInt(s); e = parseInt(e); ret = ''; com = 'comments:\r\n'; while(s < e) { n = ida.getname(s) c = ida.getcomment(s); if(n && n.length > 0){ ret += "MakeName(0X" + h(s) + ",\"" + n + "\");\r\n" } if(c && c.length > 0){ com += "0X" + h(s) + "\t= " + c + "\r\n"; } s = ida.nextea(s); if(s==-1) break; } ret = ret + "\r\n\r\n" + com t(ret) fso.setclipboard(ret); alert("Names and comments for range extracted");
ã»ãŒ
github.com/d0c-s4vage/bnarly

ãã©ãŠã¶ãã¯ã©ãã·ã¥ããåå ããŸãã¯ãã®ããŒãžããã©ãŠã¶ã®å éšæ§é ã«ã©ã®ããã«åœ±é¿ããããç解ããã«ã¯ãJavaScriptã®åäœã確èªããå¿ èŠããããŸãã ä»æ¥ãŸã§ããããã¬ãŒã®ã¿ããããåŠçã§ããŸãã ãããŠããããã¬ãŒã®ããã»ã¹ã¯ããªãéå±ã§é¢åã§ãã
ããã¯ããŒã d0c_s4vageã®å人ã¯ãJSãä»ããŠWinDbgã§äœæ¥ãè¡ããã€ãŸãJSããWinDbgã³ãã³ããå®è¡ãããšããã¢ã€ãã¢ãæã¡ãŸããã ãã®çµæã圌ã¯bNarlyãããžã§ã¯ããäœæããŸããã
bNarlyïŒãã©ãŠã¶NarlyïŒã¯ããã©ãŠã¶ã調æ»ããã³æäœããããã®ããŒã«ã§ãã bNarlyã¯ãWinDbgãããã¬ãŒãšJavaScriptã®éã®æ©æž¡ãã®äžçš®ã§ãã
ãã®ããŒã«ã¯ãjQueryã©ã€ãã©ãªã䜿çšããŠèšè¿°ãããŠããŸãã
ãã®ããŒã«ã¯å®éã«ã¯ã©ãã§åœ¹ç«ã€ã®ã§ããããïŒ æåã«é ã«æµ®ãã¶ã®ã¯ãã¯ã©ãã·ã¥ã®åææã解æŸåŸã®äœ¿çšæã®æäœæããŸãã¯ããŒãã¹ãã¬ãŒã®èª¿æŽæã§ãã
äž»ãªæ©èœïŒ
- ã¡ã¢ãªãã³ã
- ãã¬ãŒã¹ããªãŒ/å²ãåœãŠ
- JavaScriptã³ãŒãã®å®è¡
ä»äºã®ã¢ã«ãŽãªãºã ïŒ
- ãã©ãŠã¶ãéã
- WinDbgãéããç®çã®ã¿ãã«ã¢ã¿ããããŸã
- ç®çã®é¢æ°ã®WinDbgã«ãã¬ãŒã¯ãã€ã³ããé 眮ããŸã
- bNarlyãŠã£ã³ããŠã§ãå¿ èŠãªã³ãŒããäœæããŠå®è¡ããŸã
- WinDbgã¯ãã¹ãŠãç£èŠããbNarlyã¯ãã®æ å ±ã衚瀺ããŸã
- IE 8ã9ã10ã11
- Firefox> = 20
ã¹ããŒã
github.com/hexgolems/schem

æè¿ããªããŒã¹ãšã³ãžãã¢ãªã³ã°ã®äžçã§ã¯ãç 究察象ã®ããŒã¿ãèŠèŠåããããã°ã©ã ã®å®è¡ããã»ã¹ãäžè¬çã«ã¯ããã°ã©ã ã®ç 究ã«ãããç¥èŠã®å®¹æãã«é¢é£ãããã¹ãŠã衚瀺ããæ¹åã§æŽ»çºãªäœæ¥ãè¡ãããŠããŸãã
REã§æãäžè¬çã«äœ¿çšãããããŒã«ã®1ã€ã¯ãããã¬ãŒã§ãã ãããŠãããã°ã©ã ã®ããã»ã¹ã衚瀺ããæ¹æ³ã¯éåžžã«éèŠã§ãã çŸåšãå€ãã®ãããã¬ãŒããããUIãå«ããã¹ãŠã®äººãç°ãªã£ãŠããŸããåžžã«æ§æã§ãããšã¯éããŸãããã誰ããèŠããã§ããããå®å šã«æ¬ åžããŠããŸãã
SchemDBGãããžã§ã¯ãã¯ãããã€ãã®åºæ¬çãªæäœããµããŒãããã ãã§ä»»æã®ãããã¬ãŒãæ¥ç¶ã§ããããã«ããããã¬ãŒãšãã£ã¹ãã¬ã€ãå®å šã«åé¢ããããšããŠããŸãã
SchemDBGã¯ããããã°äžã®ããã°ã©ã ã®ã©ãã§ãå¯èœãªéãå€ãã®æ å ±ã衚瀺/æäŸããããšãç®æããŠããŸãã çŸåšãGDBãšPINã¯ããã¯ãšã³ããšããŠãµããŒããããŠããŸãã ãããã¯ãããããUbuntuããã¹ããã·ã³ãšãããã·ã³ã§å®è¡ããã32ãããããã³64ãããã®ãã€ããªçšã§ãã
ãããã¬ãŒã¯Rubyã§èšè¿°ãããã©ãããŒã䜿çšããŠå¶åŸ¡ãããWebããã³ããšã³ãã¯CoffeeScriptã§èšè¿°ãããŸãã ããã³ããšã³ãã¯Chromiumã®äžã§æ£åžžã«åäœããŸãïŒä»ã®ãã©ãŠã¶ã®ãµããŒãã¯äºå®ãããŠããŸããïŒã åæã«ãå€ãã®ã¯ã©ã€ã¢ã³ãã1ã€ã®ã³ã³ãããŒã©ãŒïŒãããã¬ãŒïŒã«åå ã§ããè€æ°ã®ç»é¢ã§è¡šç€ºã§ããŸãïŒç°ãªãèšå®ã§å¯èœã§ãïŒã
ãã®ãããžã§ã¯ãã¯ãGoogle Summer of Code 2013ã®äžç°ãšããŠéçºãããŸããã
ããã»ã«
tessel.io
JSã®ç¥èãåããããŒããŠã§ã¢ãåããããŸããŸãªã²ãŒã ã«ã¯ããã®ããŒããæé©ã§ãã ããã¯ãJSæ奜家ã®ããã®ãã®ãããªArduinoã®çµæãšããŠå€æããŸãïŒïŒ

ãã®éçã®è©³çŽ°ã¯ãã§ã«ããã§æ€èšãããŠããŸã ã
ç§ã«ãšã£ãŠãREããã»ã¹ã§ååŸããããŒã¿ãèŠèŠåããããã«Webãã¯ãããžãŒã䜿çšããããšã¯ãçŸåšæãææã§æçšãªããã§ãã ãã®ãããå éšéçºã§ã¯ãWebSocketãµãŒããŒã®æ©èœãå®è¡ãããã©ãŠã¶ãŒãšã®å¯Ÿè©±ãæ¯æŽããIDA Proçšã®ãã©ã°ã€ã³ãäœæãããŸããã ãŸãããã§ã«D3.jsã©ã€ãã©ãªã䜿çšãããã©ãŠã¶ãŒã§ãéçæ å ±ãšèª¿æ»äžã®ããã°ã©ã ã®å®è¡äžã«ååŸãããæ å ±ã®äž¡æ¹ãèŠèŠåãããŸãã åœç¶ãIDA Proãšãã©ãŠã¶éã®å¯Ÿè©±ã¯ã€ã³ã¿ã©ã¯ãã£ãã§ãã åæ§ã®çžäºäœçšã¯ãGeorge Hotzã®QIRAãããžã§ã¯ãã§ãèŠãããŸãã
Webãã¯ãããžãŒãšREã¿ã¹ã¯ã®éã®è·é¢ã¯åŸã ã«çããªã£ãŠãããšèšã£ãŠãéèšã§ã¯ãããŸãã...