电子取证 手机取证_1 打开苹果测试查看程序,搜索关键字:627604C2-C586-48C1-AA16-FF33C3022159.PNG
然后再导出图片
查看图片的属性
手机取证_2 直接搜索姜总,发现快递单号
计算机取证_1 我们先使用volatility查看镜像1.dmp的信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 $ vol -f 1.dmp imageinfo Volatility Foundation Volatility Framework 2.6 INFO : volatility.debug : Determining profile based on KDBG search... Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_23418 AS Layer1 : WindowsAMD64PagedMemory (Kernel AS) AS Layer2 : FileAddressSpace (D:\Desktop\计算机取证\1.dmp) PAE type : No PAE DTB : 0x187000L KDBG : 0xf80003ffa0a0L Number of Processors : 1 Image Type (Service Pack) : 1 KPCR for CPU 0 : 0xfffff80003ffbd00L KUSER_SHARED_DATA : 0xfffff78000000000L Image date and time : 2022-04-28 05:54:55 UTC+0000 Image local date and time : 2022-04-28 13:54:55 +0800Volatility Foundation Volatility Framework 2.6 INFO : volatility.debug : Determining profile based on KDBG search... Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_23418 AS Layer1 : WindowsAMD64PagedMemory (Kernel AS) AS Layer2 : FileAddressSpace (D:\Desktop\计算机取证\1.dmp) PAE type : No PAE DTB : 0x187000L KDBG : 0xf80003ffa0a0L Number of Processors : 1 Image Type (Service Pack) : 1 KPCR for CPU 0 : 0xfffff80003ffbd00L KUSER_SHARED_DATA : 0xfffff78000000000L Image date and time : 2022-04-28 05:54:55 UTC+0000 Image local date and time : 2022-04-28 13:54:55 +0800
可以看到大概率是win7sp1x64的镜像,题目需要获得taqi7的开机密码,我们直接用volatility导出用户hash:
1 2 3 4 5 6 7 $ vol -f 1.dmp --profile=Win7SP1x64 hashdump Volatility Foundation Volatility Framework 2.6 Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: taqi7:1000:aad3b435b51404eeaad3b435b51404ee:7f21caca5685f10d9e849cc84c340528::: naizheng:1002:aad3b435b51404eeaad3b435b51404ee:d123b09e13b1a82277c3e3f0ca722060::: qinai:1003:aad3b435b51404eeaad3b435b51404ee:1c333843181864a58156f3e9498fe905:::
导出之后复制taqi7的后面的密码哈希到网站上去查,可知密码是anxinqi
计算机取证_2 题目是要得到制作该内存镜像的进程Pid号,我们使用volatility获取内存中的进程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 $ vol -f 1.dmp --profile=Win7SP1x64 pslist Volatility Foundation Volatility Framework 2.6 Offset(V) Name PID PPID Thds Hnds Sess Wow64 Start Exit ------------------ -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------ 0xfffffa800ccc7890 System 4 0 105 623 ------ 0 2022-04-28 05:38:41 UTC+0000 0xfffffa800d9c3610 smss.exe 288 4 2 29 ------ 0 2022-04-28 05:38:41 UTC+0000 0xfffffa800e100740 csrss.exe 384 376 9 486 0 0 2022-04-28 05:38:42 UTC+0000 0xfffffa800e4a3840 wininit.exe 424 376 3 78 0 0 2022-04-28 05:38:43 UTC+0000 0xfffffa800e4a7b30 csrss.exe 436 416 10 645 1 0 2022-04-28 05:38:43 UTC+0000 0xfffffa800e50b060 winlogon.exe 492 416 5 116 1 0 2022-04-28 05:38:43 UTC+0000 0xfffffa800e523910 services.exe 532 424 6 216 0 0 2022-04-28 05:38:43 UTC+0000 0xfffffa800e52fb30 lsass.exe 544 424 6 614 0 0 2022-04-28 05:38:43 UTC+0000 0xfffffa800e489060 lsm.exe 552 424 11 209 0 0 2022-04-28 05:38:43 UTC+0000 0xfffffa800e612630 svchost.exe 660 532 11 357 0 0 2022-04-28 05:38:43 UTC+0000 0xfffffa800e638b30 svchost.exe 728 532 8 290 0 0 2022-04-28 05:38:43 UTC+0000 0xfffffa800e6553b0 svchost.exe 776 532 21 502 0 0 2022-04-28 05:38:43 UTC+0000 0xfffffa800e602750 svchost.exe 920 532 17 405 0 0 2022-04-28 05:38:44 UTC+0000 0xfffffa800e6da4e0 svchost.exe 960 532 42 1121 0 0 2022-04-28 05:38:44 UTC+0000 0xfffffa800e6f7060 audiodg.exe 1020 776 6 131 0 0 2022-04-28 05:38:44 UTC+0000 0xfffffa800e722060 svchost.exe 420 532 9 530 0 0 2022-04-28 05:38:44 UTC+0000 0xfffffa800e749b30 ZhuDongFangYu. 956 532 26 394 0 1 2022-04-28 05:38:44 UTC+0000 0xfffffa800e75a950 svchost.exe 1040 532 23 636 0 0 2022-04-28 05:38:44 UTC+0000 0xfffffa800e85b570 spoolsv.exe 1300 532 12 313 0 0 2022-04-28 05:38:45 UTC+0000 0xfffffa800e88cb30 svchost.exe 1336 532 17 321 0 0 2022-04-28 05:38:45 UTC+0000 0xfffffa800e907630 svchost.exe 1440 532 4 81 0 1 2022-04-28 05:38:45 UTC+0000 0xfffffa800e9c6740 vmtoolsd.exe 1548 532 9 276 0 0 2022-04-28 05:38:45 UTC+0000 0xfffffa800eabd060 svchost.exe 1960 532 5 101 0 0 2022-04-28 05:38:46 UTC+0000 0xfffffa800eb07b30 dllhost.exe 1612 532 13 186 0 0 2022-04-28 05:38:46 UTC+0000 0xfffffa800eb36b30 msdtc.exe 2068 532 12 144 0 0 2022-04-28 05:38:48 UTC+0000 0xfffffa800eabe980 svchost.exe 2512 532 11 146 0 0 2022-04-28 05:40:46 UTC+0000 0xfffffa800ea79b30 svchost.exe 2584 532 13 335 0 0 2022-04-28 05:40:46 UTC+0000 0xfffffa800eaa8310 SearchIndexer. 2648 532 11 658 0 0 2022-04-28 05:40:47 UTC+0000 0xfffffa800ea7a0f0 WmiPrvSE.exe 1792 660 7 114 0 0 2022-04-28 05:42:48 UTC+0000 0xfffffa800cdf4b30 taskhost.exe 916 532 9 209 1 0 2022-04-28 05:42:55 UTC+0000 0xfffffa800cdfe210 dwm.exe 972 920 3 70 1 0 2022-04-28 05:42:55 UTC+0000 0xfffffa800e585b30 explorer.exe 2044 1716 53 1335 1 0 2022-04-28 05:42:55 UTC+0000 0xfffffa800e83eb30 vmtoolsd.exe 2672 2044 7 209 1 0 2022-04-28 05:42:56 UTC+0000 0xfffffa800e84f780 ldnews.exe 2664 2044 10 363 1 1 2022-04-28 05:42:56 UTC+0000 0xfffffa800ea25580 360Tray.exe 2436 956 150 1455 1 1 2022-04-28 05:42:57 UTC+0000 0xfffffa800edc8b30 LiveUpdate360. 3500 2288 18 305 1 1 2022-04-28 05:43:13 UTC+0000 0xfffffa800ee90b30 360TptMon.exe 4012 3784 17 415 1 1 2022-04-28 05:43:22 UTC+0000 0xfffffa800ee6bb30 svchost.exe 3316 532 3 57 0 1 2022-04-28 05:43:23 UTC+0000 0xfffffa800eb76b30 SoftMgrLite.ex 3396 2436 30 360 1 1 2022-04-28 05:44:13 UTC+0000 0xfffffa800ec4b630 TrueCrypt.exe 3496 2044 5 268 1 1 2022-04-28 05:46:22 UTC+0000 0xfffffa800ea45b30 TrueCrypt Form 2964 3496 0 -------- 1 0 2022-04-28 05:46:35 UTC+0000 2022-04-28 05:47:59 UTC+0000 0xfffffa800ed78720 SearchProtocol 2548 2648 7 316 0 0 2022-04-28 05:52:53 UTC+0000 0xfffffa800ec2e6f0 notepad.exe 2872 2044 1 62 1 0 2022-04-28 05:54:13 UTC+0000 0xfffffa800f103b30 MagnetRAMCaptu 2192 2044 16 333 1 1 2022-04-28 05:54:30 UTC+0000 0xfffffa800ea7b910 360speedld.exe 3880 2436 4 94 1 1 2022-04-28 05:54:54 UTC+0000 0xfffffa800ef76b30 dllhost.exe 3604 660 6 91 1 0 2022-04-28 05:54:55 UTC+0000
一开始以为是lsass,后来在做后面的问题时发现有magnetramcapture程序,非常可疑,于是就提交了MagnetRAMCaptu的pid,答案正确:2192
计算机取证_3 题目需要bitlokcer分区某office文件中存在的flag值,那么我们肯定要找到bitlocker的密码。通过搜索发现这篇文章「王老师实操课」三种思路巧妙破解Bitlocker加密 - 知乎
于是我使用010Editor打开镜像文件,直接搜索Unicode字符:“恢复密钥:”,得出如下结果:
bitlocker恢复密钥是由8组6个数字组成的48位数字组成的,这里的搜索结果全部相同,那么我可以肯定应该就是这个密钥。
然后题目还给出了另一个文件:G.E01,经过搜索E01是经常用在司法取证当中的磁盘镜像文件。我们使用Arsenal-Image-Mounter工具进行挂载:
输入密码,打开有四个文件,一个pass.txt很明显是字典,然后两个加密的pptx和docx文件,还有一个新建文本文档
推测要使用字典爆破office文件,我使用Tenorshare PassFab for PPT工具爆破出了密码:
打开后得到flag:
计算机取证_4 这题要我们提取TrueCrypt加密中存在的flag值。在之前对内存镜像的分析中我多次看到有关TrueCrypt的进程、文件等,于是我dump出了TrueCrypt.exe的进程:
1 $ vol -f 1.dmp --profile=Win7SP1x64 memdump -p 3496 -D ./
得到了一个340MB的镜像文件
然后我使用foremost对转储文件进行提取:
得到了以下文件:
发现一个压缩包:
怀疑伪加密,7zip打开无果,上ziperello爆破:
很快就出来了,txt里写了flag:
程序分析_1 这题问本程序包名,我得到apk文件后先使用apkscan等工具查看了一波,没什么信息,于是拖到jadx中反编译查看。对于查看文件信息,我们可以使用aapt工具:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 $ D:\tools\retools\Tool\反汇编工具\AndroidKiller\AndroidKillerPlugin\apktool\aapt.exe dump badging .\EXEC.apk package: name='exec.azj.kny.d.c' versionCode='9' versionName='5.0' sdkVersion:'21' targetSdkVersion:'29' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-permission:'android.permission.CAMERA' uses-permission:'android.permission.READ_PHONE_STATE' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.ACCESS_WIFI_STATE' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.READ_PHONE_STATE' application: label='EXEC' icon='res/mipmap-xxhdpi-v4/ic_launcher.jpg' launchable activity name='minmtta.hemjcbm.ahibyws.MainActivity' label='EXEC' icon='' uses-feature:'android.hardware.camera' uses-feature:'android.hardware.camera.autofocus' uses-feature:'android.hardware.wifi' uses-feature:'android.hardware.touchscreen' main other-activities other-services supports-screens: 'small' 'normal' 'large' locales: '--_--' 'ca' 'da' 'fa' 'ja' 'ka' 'pa' 'ta' 'nb' 'be' 'de' 'ne' 'te' 'af' 'bg' 'th' 'fi' 'hi' 'si' 'vi' 'kk' 'mk' 'sk' 'uk' 'el' 'gl' 'ml' 'nl' 'pl' 'sl' 'tl' 'am' 'km' 'bn' 'in' 'kn' 'mn' 'ko' 'lo' 'ro' 'sq' 'ar' 'fr' 'hr' 'mr' 'or' 'sr' 'tr' 'ur' 'as' 'bs' 'cs' 'es' 'is' 'ms' 'et' 'it' 'lt' 'pt' 'eu' 'gu' 'hu' 'ru' 'zu' 'lv' 'sv' 'iw' 'sw' 'hy' 'ky' 'my' 'az' 'uz' 'en_CA' 'fr_CA' 'en_GB' 'en_XC' 'zh_HK' 'zh_CN' 'en_IN' 'pt_BR' 'es_US' 'pt_PT' 'en_AU' 'zh_TW' densities: '160' '240' '320' '480' '640'
可知包名为exec.azj.kny.d.c。
程序分析_2 这题要找到本程序的入口,在上一题的aapt工具输出中就已经可以知道了,为minmtta.hemjcbm.ahibyws.MainActivity。
程序分析_3 这题需要获得本程序的服务器地址的密文,我先在jadx中打开入口函数:
发现这里返回了一个bash64解码字符串。对它进行解码:
发现是条url,直接提交,正确。
程序分析_4 题目问本程序实现安全检测的类的名称,那么我首先当然要知道它实现了怎样的安全检测。于是我安装apk后运行查看情况,发现进入应用时会提示手机已root,还有注意资金安全的提示。于是我推测是运行环境安全检测相关的类。于是我搜索到了这个函数:
可以发现,这里多次调用d.a.a.c.a.a函数来进行安全检测,于是查看d.a.a.c.a类:
发现它进行了一些环境的安全检测。介于程序的符号进行了一定程度的混淆,大胆猜测类名也就是flag就是a,提交果然正确。
网站取证_1 木马文件在/WWW/runtime/temp/
下
网站取证_2 在/WWW/Application/database.php
中可以找到密码函数
在/WWW/Application/encrypt/encrypt.php
中找到此函数,丢到PHP5.*环境跑一下就有了
网站取证_3 先找到金额处理的地方,搜索关键字money
,定位到/WWW/Application/admin/controller/chanelorder.php
很明显就是在这个页面处理的金额,在当前页面搜索关键字money
,定位到encrypt函数
盐值就在函数里
网站取证_4 计算张宝在北京时间2022-04-02 00:00:00-2022-04-18 23:59:59累计转账给王子豪多少RMB
一共有7个库,其中:
汇率在info_bargain
库
转账信息在tab_channel_order_list
库
用户id在tab_user
库
搜索名字可以找到对应的id
查询每天的转账记录
修改每天的汇率,每天转账的金额,放到金额解密脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 <?php function decrypt ($str ) { $key = md5 ('jyzg123456' ); $str = base64_decode ($str ); $len = strlen ($str ); $char = '' ; $x = 0 ; $l = strlen ($key ); for ($i = 0 ; $i < $len ; $i ++) { if ($x == $l ) { $x = 0 ; } $char .= $key [$x ]; $x ++; } $data = '' ; for ($i = 0 ; $i < $len ; $i ++) { $data .= chr (ord ($str [$i ]) - ord ($char [$i ])); } return $data ; } $rate = 0.05 ;$file = fopen ('1.txt' ,'r' );$sum = 0 ;while (!feof ($file )){ $sum += decrypt (fgets ($file )); } fclose ($file );echo $sum *$rate ;
杂项 domainhacker 下载附件,一个流量包
wireshark打开,导出HTTP流
得到一个压缩包和一些payload
url解码后发现有三个参数,其中a应该是shell
整理一下a,理出大概逻辑,主要发现参数的传递,是截断前两位后解码
由此可以知道其他参数的明文,主要是第二个参数,解码后发现是执行的指令,在1(16).php中发现压缩包的密码为SecretsPassw0rds
解压后是mimikatz
抓下来的windows账户和密码,里面就有机器的hash
domainhacker2 下载附件,是一个流量包和ntds的压缩包
压缩包密码获取方法同上,不赘述
解压后有两个文件夹,共三个文件
使用Impacket中的secretsdump可以提取ntds.dit中的hash
Reverse Loader 视频讲解:2022蓝帽杯loader一步步分析_哔哩哔哩_bilibili
一个用Nim写的shellcode加载器,dump出pe文件后进行逆向,使用字符串定位关键点(鉴于Nim的底层编码,很多变量都是使用引用+结构体的数据结构,向上寻找交叉引用),比赛没有做出来,其实就是利用SSE指令集进行大数计算二元二次方程的程序,flag前一半的平方减后一半的平方的11倍为9且满足一定大小
审计后的主要代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 int sub_A52850 () { FILE *stdin ; __int64 *input_len; input_len_copy_copy_tmp *input_len_copy; __int64 v3; __int64 *v4; __int64 v5; __m128i *first_4_bytes_pointer_2; __m128i *first_4_bytes_pointer_copy_2; __m128i *v8; input_len_copy_copy_tmp *flag_info_copy_copy_tmp; __int64 flag_index; _18_m128 *pre_split_flag; unsigned __int64 offseted_index; __int64 flag_index_2; input_len_copy_copy_tmp *input_len_copy_copy_copy; _18_m128 *next_flag_info; unsigned __int64 offseted_index_2; bigNumber *pre_flag_square_copy; __int64 *v19; unsigned __int64 v20; __m128i next_flag_square_int128; bigNumber *next_flag_square_multiply_INT_copy; __int64 *v23; unsigned __int64 v24; __m128i INT_loaded_tmp_2; __m128i INT_loaded_tmp_1; bigNumber *pre_flag_square; __int64 v28; bigNumber *next_flag_square[2 ]; bigNumber *next_flag_square_multiply_INT; __int64 v31; nimRegisterGlobalMarker(sub_A527A0); nimRegisterGlobalMarker(sub_A52790); nimRegisterGlobalMarker(sub_A52780); nimRegisterGlobalMarker(sub_A52770); nimRegisterGlobalMarker(sub_A52760); nimRegisterGlobalMarker(sub_A52750); nimRegisterGlobalMarker(sub_A52740); nimRegisterGlobalMarker(sub_A52730); nimRegisterGlobalMarker(sub_A52720); printf_0(off_A56DC8, 1 i64); stdin = (FILE *)get_io(0 i64); input_len = (__int64 *)scanf (stdin ); input_len_copy = (input_len_copy_copy_tmp *)input_len; if ( input_len ) *(input_len - 2 ) += 8 i64; if ( input_len_copy_copy ) { v3 = *(_QWORD *)&input_len_copy_copy[-1 ].flag[26 ]; v4 = (__int64 *)&input_len_copy_copy[-1 ].flag[26 ]; *(_QWORD *)&input_len_copy_copy[-1 ].flag[26 ] = v3 - 8 ; if ( (unsigned __int64)(v3 - 8 ) <= 7 ) addZCT__Y66tOYFjgwJ0k4aLz4bc0Q((__int64)(&qword_A61F80 + 3 ), v4); } input_len_copy_copy = input_len_copy; v5 = 0 i64; first_4_bytes_pointer_2 = get_empty_flag_info(5 i64); first_4_bytes_pointer_copy_2 = first_4_bytes_pointer_2; if ( !first_4_bytes_pointer_2 ) { if ( input_len_copy ) sub_A4C420(0 i64, -1 i64); sub_A4C420(0 i64, -1 i64); } if ( !input_len_copy ) { if ( !first_4_bytes_pointer_2->m128i_i64[0 ] ) sub_A4C420(0 i64, -1 i64); sub_A4C420(0 i64, -1 i64); } do { if ( first_4_bytes_pointer_2->m128i_i64[0 ] <= (unsigned __int64)v5 ) sub_A4C420(v5, first_4_bytes_pointer_2->m128i_i64[0 ] - 1 ); if ( input_len_copy->char_len <= (unsigned __int64)v5 ) sub_A4C420(v5, input_len_copy->char_len - 1 ); first_4_bytes_pointer_2[1 ].m128i_i8[v5] = input_len_copy->flag[v5]; ++v5; } while ( v5 <= 4 ); if ( first_4_bytes_pointer_2->m128i_i64[0 ] != 5 ) goto fail; v8 = first_4_bytes_pointer_2 + 1 ; if ( first_4_bytes_pointer_copy_2[1 ].m128i_i32[0 ] != 'galf' ) goto fail; if ( v8->m128i_i8[4 ] != '{' ) goto fail; flag_info_copy_copy_tmp = input_len_copy_copy; if ( !input_len_copy_copy || input_len_copy_copy->char_len != 42 || input_len_copy_copy->flag[41 ] != '}' ) goto fail; flag_index = 0 i64; pre_split_flag = (_18_m128 *)get_empty_flag_info(18 i64); if ( !pre_split_flag ) sub_A4C420(0 i64, -1 i64); do { if ( pre_split_flag->pre[0 ] <= (unsigned __int64)flag_index ) sub_A4C420(flag_index, pre_split_flag->pre[0 ] - 1 ); offseted_index = flag_index + 5 ; if ( flag_index + 5 < 0 || offseted_index < flag_index ) sub_A47F70(); if ( flag_info_copy_copy_tmp->char_len <= offseted_index ) sub_A4C420(flag_index + 5 , flag_info_copy_copy_tmp->char_len - 1 ); pre_split_flag->split_flag[flag_index++] = flag_info_copy_copy_tmp->flag[offseted_index]; } while ( flag_index <= 17 ); flag_index_2 = 0 i64; string_to_int128(pre_split_flag, 10 i64, &pre_split_flag_INT); input_len_copy_copy_copy = input_len_copy_copy; next_flag_info = (_18_m128 *)get_empty_flag_info(18 i64); if ( !next_flag_info ) { if ( input_len_copy_copy_copy ) sub_A4C420(0 i64, -1 i64); sub_A4C420(0 i64, -1 i64); } if ( !input_len_copy_copy_copy ) { if ( !next_flag_info->pre[0 ] ) sub_A4C420(0 i64, -1 i64); sub_A4C420(23 i64, -1 i64); } do { if ( next_flag_info->pre[0 ] <= (unsigned __int64)flag_index_2 ) sub_A4C420(flag_index_2, next_flag_info->pre[0 ] - 1 ); offseted_index_2 = flag_index_2 + 23 ; if ( flag_index_2 + 23 < 0 || offseted_index_2 < flag_index_2 ) sub_A47F70(); if ( input_len_copy_copy_copy->char_len <= offseted_index_2 ) sub_A4C420(flag_index_2 + 23 , input_len_copy_copy_copy->char_len - 1 ); next_flag_info->split_flag[flag_index_2++] = input_len_copy_copy_copy->flag[offseted_index_2]; } while ( flag_index_2 <= 17 ); string_to_int128(next_flag_info, 10 i64, &next_flag_INT); string_to_int128((_18_m128 *)&calced_int128_info_1, 10 i64, &EightByteLenMagicNum_1_0); string_to_int128((_18_m128 *)&calced_int128_info_2, 10 i64, (bigNumber **)&EightByteLenMagicNum_2_0); INT_loaded_tmp_1 = _mm_loadu_si128((const __m128i *)&EightByteLenMagicNum_1_0); INT_loaded_tmp_2 = _mm_loadu_si128((const __m128i *)&pre_split_flag_INT); if ( !(unsigned __int8)sub_A52080(&INT_loaded_tmp_1, &INT_loaded_tmp_2) ) goto fail; INT_loaded_tmp_1 = _mm_loadu_si128((const __m128i *)&pre_split_flag_INT); INT_loaded_tmp_2 = _mm_loadu_si128((const __m128i *)&EightByteLenMagicNum_2_0); if ( !(unsigned __int8)sub_A52080(&INT_loaded_tmp_1, &INT_loaded_tmp_2) ) goto fail; pre_flag_square = 0 i64; v28 = 0 i64; INT_loaded_tmp_1 = *(__m128i *)&pre_split_flag_INT; INT_loaded_tmp_2 = *(__m128i *)&pre_split_flag_INT; big_number_square(&INT_loaded_tmp_1, &INT_loaded_tmp_2, &pre_flag_square); pre_flag_square_copy = pre_flag_square; if ( pre_flag_square ) *(_QWORD *)&pre_flag_square[-1 ].number += 8 i64; if ( (_QWORD)pre_flag_square_copy_copy ) { v19 = (__int64 *)(pre_flag_square_copy_copy - 16 ); v20 = *(_QWORD *)(pre_flag_square_copy_copy - 16 ) - 8 i64; *(_QWORD *)(pre_flag_square_copy_copy - 16 ) = v20; if ( v20 <= 7 ) addZCT__Y66tOYFjgwJ0k4aLz4bc0Q((__int64)(&qword_A61F80 + 3 ), v19); } *(_QWORD *)&pre_flag_square_copy_copy = pre_flag_square_copy; next_flag_square[0 ] = 0 i64; next_flag_square[1 ] = 0 i64; BYTE8(pre_flag_square_copy_copy) = v28; INT_loaded_tmp_1 = *(__m128i *)&next_flag_INT; INT_loaded_tmp_2 = *(__m128i *)&next_flag_INT; big_number_square(&INT_loaded_tmp_1, &INT_loaded_tmp_2, next_flag_square); next_flag_square_int128 = _mm_load_si128((const __m128i *)next_flag_square); next_flag_square_multiply_INT = 0 i64; v31 = 0 i64; INT_loaded_tmp_1 = next_flag_square_int128; bit_number_multiply(&INT_loaded_tmp_1, 11u , (char *)&next_flag_square_multiply_INT); next_flag_square_multiply_INT_copy = next_flag_square_multiply_INT; if ( next_flag_square_multiply_INT ) *(_QWORD *)&next_flag_square_multiply_INT[-1 ].number += 8 i64; if ( (_QWORD)next_flag_square_multiply_INT_copy_copy ) { v23 = (__int64 *)(next_flag_square_multiply_INT_copy_copy - 16 ); v24 = *(_QWORD *)(next_flag_square_multiply_INT_copy_copy - 16 ) - 8 i64; *(_QWORD *)(next_flag_square_multiply_INT_copy_copy - 16 ) = v24; if ( v24 <= 7 ) addZCT__Y66tOYFjgwJ0k4aLz4bc0Q((__int64)(&qword_A61F80 + 3 ), v23); } *(_QWORD *)&next_flag_square_multiply_INT_copy_copy = next_flag_square_multiply_INT_copy; INT_loaded_tmp_1 = _mm_loadu_si128((const __m128i *)&pre_flag_square_copy_copy); BYTE8(next_flag_square_multiply_INT_copy_copy) = v31; INT_loaded_tmp_2 = _mm_loadu_si128((const __m128i *)&next_flag_square_multiply_INT_copy_copy); bit_number_subtract(INT_loaded_tmp_1.m128i_i64, INT_loaded_tmp_2.m128i_i64, (char *)&subtracted_bitNumber); string_to_int128((_18_m128 *)&xmmword_A56D10, 10 i64, &9 _int128); INT_loaded_tmp_1 = _mm_loadu_si128((const __m128i *)&subtracted_bitNumber); INT_loaded_tmp_2 = _mm_loadu_si128((const __m128i *)&9 _int128); if ( (unsigned __int8)bitNumber_compare(&INT_loaded_tmp_1, &INT_loaded_tmp_2) ) { qword_A5A660 = 1 i64; } else { fail: if ( qword_A5A660 != 1 ) return printf_0(off_A56CC0, 1 i64); } return printf_0(off_A56CE8, 1 i64); }
请参考第六届蓝帽杯WP