Guest User

Untitled

a guest
Feb 23rd, 2019
448
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.51 KB | None | 0 0
  1. void __fastcall sub_14066D610(__int64 a1, unsigned int **a2)
  2. {
  3. unsigned int **v2; // r14
  4. __int64 v3; // r12
  5. unsigned int *v4; // rdi
  6. unsigned int v5; // ebx
  7. int v6; // ebx
  8. unsigned int v7; // eax
  9. int v8; // ebx
  10. void *v9; // r15
  11. char *v10; // rax
  12. __int64 *v11; // rdi
  13. __int64 v12; // rax
  14. signed int v13; // eax
  15. __int64 v14; // rsi
  16. __int64 v15; // rax
  17. __int64 v16; // rax
  18. void *v17; // rsi
  19. unsigned int *v18; // rbx
  20. __int64 v19; // rdi
  21. __int64 v20; // rax
  22. unsigned int v21; // er15
  23. void *v22; // rbx
  24. int i; // edi
  25. __int64 v24; // rax
  26. __int64 v25; // rax
  27. void *v26; // rax
  28. int v27; // er13
  29. void *v28; // rax
  30. __int64 v29; // rdi
  31. char *v30; // rax
  32. __int64 *v31; // r12
  33. __int64 v32; // rax
  34. signed int v33; // eax
  35. unsigned int *v34; // rsi
  36. unsigned int j; // edi
  37. __int64 v36; // rax
  38. signed int v37; // edi
  39. __int64 v38; // rax
  40. __int64 v39; // rax
  41. int v40; // edi
  42. signed __int64 v41; // r13
  43. __int64 v42; // rax
  44. __int64 v43; // rax
  45. void *v44; // rax
  46. char *v45; // rsi
  47. char *v46; // rdi
  48. char *k; // r12
  49. unsigned __int64 v48; // rdx
  50. char *v49; // rax
  51. unsigned __int64 v50; // rsi
  52. int v51; // esi
  53. __int64 v52; // r12
  54. __int64 v53; // rax
  55. BOOL v54; // edi
  56. __int64 v55; // rdx
  57. void (__fastcall ***v56)(_QWORD, signed __int64); // rdi
  58. unsigned int *v57; // rbx
  59. signed int v58; // esi
  60. __int64 v59; // rax
  61. __int64 v60; // rax
  62. int v61; // [rsp+30h] [rbp-D0h]
  63. int v62; // [rsp+34h] [rbp-CCh]
  64. unsigned __int64 v63; // [rsp+38h] [rbp-C8h]
  65. int v64; // [rsp+40h] [rbp-C0h]
  66. int v65; // [rsp+44h] [rbp-BCh]
  67. char *v66; // [rsp+48h] [rbp-B8h]
  68. int v67; // [rsp+50h] [rbp-B0h]
  69. int v68; // [rsp+54h] [rbp-ACh]
  70. __int64 v69; // [rsp+58h] [rbp-A8h]
  71. __int128 v70; // [rsp+60h] [rbp-A0h]
  72. __int64 v71; // [rsp+70h] [rbp-90h]
  73. __int64 v72; // [rsp+78h] [rbp-88h]
  74. __int64 v73; // [rsp+80h] [rbp-80h]
  75. __int64 v74; // [rsp+88h] [rbp-78h]
  76. __int128 v75; // [rsp+90h] [rbp-70h]
  77. LPVOID lpMem[2]; // [rsp+A0h] [rbp-60h]
  78. __int64 v77; // [rsp+B0h] [rbp-50h]
  79. __int128 v78; // [rsp+B8h] [rbp-48h]
  80. char v79; // [rsp+C8h] [rbp-38h]
  81. char v80; // [rsp+D8h] [rbp-28h]
  82. BOOL v81; // [rsp+E8h] [rbp-18h]
  83. __int64 v82; // [rsp+F0h] [rbp-10h]
  84. char v83; // [rsp+F8h] [rbp-8h]
  85. char v84; // [rsp+108h] [rbp+8h]
  86. __int64 v85; // [rsp+118h] [rbp+18h]
  87. __int128 v86; // [rsp+130h] [rbp+30h]
  88. char v87; // [rsp+140h] [rbp+40h]
  89. char v88; // [rsp+150h] [rbp+50h]
  90. char v89; // [rsp+160h] [rbp+60h]
  91. char v90; // [rsp+180h] [rbp+80h]
  92. char v91; // [rsp+190h] [rbp+90h]
  93. char v92; // [rsp+1B8h] [rbp+B8h]
  94. __int64 v93; // [rsp+220h] [rbp+120h]
  95. char v94; // [rsp+230h] [rbp+130h]
  96. unsigned __int64 v95; // [rsp+238h] [rbp+138h]
  97.  
  98. v93 = a1;
  99. v82 = -2i64;
  100. v2 = a2;
  101. v3 = a1;
  102. sub_14065C410("[archive] Loading headers...");
  103. v67 = 0;
  104. v64 = 0;
  105. v65 = 0;
  106. HIDWORD(v63) = 0;
  107. v61 = 0;
  108. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v67, 4i64);
  109. sub_1406567A0(&v79, &v67, 4i64);
  110. if ( (unsigned __int8)sub_140656BC0(&v79, "AGAR") )
  111. {
  112. v64 = 1;
  113. v65 = 0;
  114. HIDWORD(v63) = 0;
  115. }
  116. else
  117. {
  118. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v64, 4i64);
  119. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v65, 4i64);
  120. (*(void (__fastcall **)(unsigned int *, char *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
  121. v2[1],
  122. (char *)&v63 + 4,
  123. 4i64);
  124. }
  125. _mm_storeu_si128((__m128i *)&v70, (__m128i)0i64);
  126. v4 = *v2;
  127. if ( *v2 )
  128. {
  129. v5 = *v4;
  130. if ( *v4 )
  131. {
  132. while ( (unsigned int)sub_140657680(v4, v5, v5 + 1) != v5 )
  133. {
  134. v5 = *v4;
  135. if ( !*v4 )
  136. goto LABEL_11;
  137. }
  138. if ( v5 != -1 )
  139. v70 = *(_OWORD *)v2;
  140. }
  141. }
  142. LABEL_11:
  143. if ( v64 > 1 || v64 == 1 && v65 >= 1 )
  144. {
  145. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v61, 4i64);
  146. v6 = v61;
  147. v7 = v61 & 0x80000000;
  148. *(_DWORD *)(v3 + 344) = v61 & 0x80000000;
  149. v8 = v6 & 0x7FFFFFFF;
  150. v61 = v8;
  151. if ( v7 )
  152. {
  153. v9 = operator new(v8);
  154. (*(void (__fastcall **)(unsigned int *, void *, _QWORD))(*(_QWORD *)v2[1] + 16i64))(v2[1], v9, (unsigned int)v8);
  155. *(_QWORD *)(v93 + 360) = (*(__int64 (**)(void))(*(_QWORD *)v2[1] + 48i64))();
  156. v10 = (char *)operator new(0x1050ui64);
  157. v66 = v10;
  158. if ( v10 )
  159. v11 = (__int64 *)sub_14068FB10(v10, &unk_140868188, 56i64);
  160. else
  161. v11 = 0i64;
  162. _mm_storeu_si128((__m128i *)&v78, (__m128i)0i64);
  163. if ( v11 )
  164. {
  165. if ( *v11 )
  166. {
  167. v13 = 0;
  168. }
  169. else
  170. {
  171. v12 = sub_140657390(16i64);
  172. v66 = (char *)v12;
  173. if ( v12 )
  174. {
  175. *(_DWORD *)v12 = 1;
  176. *(_DWORD *)(v12 + 4) = 1;
  177. *(_QWORD *)(v12 + 8) = v11;
  178. }
  179. else
  180. {
  181. v12 = 0i64;
  182. }
  183. *v11 = v12;
  184. v13 = 1;
  185. }
  186. v14 = *v11;
  187. if ( !v13 )
  188. sub_140039200(*v11);
  189. *(_QWORD *)&v78 = v14;
  190. *((_QWORD *)&v78 + 1) = v11;
  191. }
  192. else
  193. {
  194. v11 = (__int64 *)*((_QWORD *)&v78 + 1);
  195. }
  196. sub_14068FB30(v11, v9, (unsigned int)v8);
  197. v15 = sub_140051010(&qword_140A29370);
  198. v66 = (char *)v15;
  199. if ( v15 )
  200. v16 = sub_14065C4F0(v15, v9, v8, 1i64);
  201. else
  202. v16 = 0i64;
  203. sub_14066CDF0(v2, v16);
  204. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v61, 4i64);
  205. sub_14066C6E0(&v78);
  206. v3 = v93;
  207. }
  208. }
  209. else
  210. {
  211. v61 = v67;
  212. }
  213. if ( SHIDWORD(v63) > 0 )
  214. {
  215. v17 = operator new(SHIDWORD(v63));
  216. v18 = v2[1];
  217. v19 = *(_QWORD *)v18;
  218. v20 = (*(__int64 (__fastcall **)(unsigned int *))(*(_QWORD *)v18 + 48i64))(v2[1]);
  219. (*(void (__fastcall **)(unsigned int *, __int64))(v19 + 40))(v18, v20 + SHIDWORD(v63));
  220. j_j_j__free_base(v17);
  221. }
  222. sub_14065C410("[archive] Contains %i files");
  223. v21 = 256;
  224. v22 = operator new(0x100ui64);
  225. for ( i = 0; i < v61; ++i )
  226. {
  227. LODWORD(v63) = 0;
  228. (*(void (__fastcall **)(unsigned int *, unsigned __int64 *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
  229. v2[1],
  230. &v63,
  231. 4i64);
  232. if ( (unsigned int)v63 > v21 )
  233. {
  234. j_j_j__free_base(v22);
  235. v21 = v63;
  236. v22 = operator new((unsigned int)v63);
  237. }
  238. (*(void (__fastcall **)(unsigned int *, void *))(*(_QWORD *)v2[1] + 16i64))(v2[1], v22);
  239. *((_BYTE *)v22 + (unsigned int)v63) = 0;
  240. sub_1400FE240(&v71);
  241. v71 = 0i64;
  242. v72 = 0i64;
  243. v73 = 0i64;
  244. v74 = 0i64;
  245. v24 = sub_1406567A0(&v83, v22, 0xFFFFFFFFi64);
  246. sub_1406569D0(&v71, v24);
  247. sub_140656EF0(&v83);
  248. (*(void (__fastcall **)(unsigned int *, __int64 *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v74, 8i64);
  249. (*(void (__fastcall **)(unsigned int *, __int64 *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v73, 8i64);
  250. v25 = sub_14066C150(&v88, &v71, &v71);
  251. v26 = (void *)sub_14066B580(v3 + 312, v25);
  252. sub_14066BC20(v3 + 312, v26);
  253. v66 = &v89;
  254. sub_140656EF0(&v89);
  255. sub_140656EF0(&v88);
  256. sub_140656EF0(&v71);
  257. }
  258. if ( v64 > 1 || v64 == 1 && v65 >= 1 )
  259. {
  260. sub_14066CCD0(v2, &v70);
  261. v62 = 0;
  262. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v62, 4i64);
  263. v27 = v62 & 0x7FFFFFFF;
  264. v62 &= 0x7FFFFFFFu;
  265. if ( *(_DWORD *)(v3 + 344) )
  266. {
  267. v28 = operator new(v27);
  268. v29 = (__int64)v28;
  269. v69 = (__int64)v28;
  270. (*(void (__fastcall **)(unsigned int *, void *, _QWORD))(*(_QWORD *)v2[1] + 16i64))(v2[1], v28, (unsigned int)v27);
  271. *(_QWORD *)(v3 + 360) = (*(__int64 (**)(void))(*(_QWORD *)v2[1] + 48i64))();
  272. v30 = (char *)operator new(0x1050ui64);
  273. v66 = v30;
  274. if ( v30 )
  275. v31 = (__int64 *)sub_14068FB10(v30, &unk_1408681C0, 56i64);
  276. else
  277. v31 = 0i64;
  278. _mm_storeu_si128((__m128i *)&v75, (__m128i)0i64);
  279. if ( v31 )
  280. {
  281. if ( *v31 )
  282. {
  283. v33 = 0;
  284. }
  285. else
  286. {
  287. v32 = sub_140657390(16i64);
  288. v66 = (char *)v32;
  289. if ( v32 )
  290. {
  291. *(_DWORD *)v32 = 1;
  292. *(_DWORD *)(v32 + 4) = 1;
  293. *(_QWORD *)(v32 + 8) = v31;
  294. }
  295. *v31 = v32;
  296. v33 = 1;
  297. }
  298. v34 = (unsigned int *)*v31;
  299. if ( !v33 )
  300. {
  301. for ( j = *v34; *v34; j = *v34 )
  302. {
  303. if ( (unsigned int)sub_140657680(v34, j, j + 1) == j )
  304. break;
  305. }
  306. v29 = v69;
  307. }
  308. *(_QWORD *)&v75 = v34;
  309. *((_QWORD *)&v75 + 1) = v31;
  310. }
  311. else
  312. {
  313. v31 = (__int64 *)*((_QWORD *)&v75 + 1);
  314. v34 = (unsigned int *)v75;
  315. }
  316. sub_14068FB30(v31, v29, (unsigned int)v27);
  317. v36 = sub_140051010(&qword_140A29370);
  318. v66 = (char *)v36;
  319. if ( v36 )
  320. v36 = sub_14065C4F0(v36, v29, v27, 1i64);
  321. sub_14066CDF0(v2, v36);
  322. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v62, 4i64);
  323. *((_QWORD *)&v75 + 1) = 0i64;
  324. if ( v34 )
  325. {
  326. *(_QWORD *)&v75 = 0i64;
  327. v37 = 0;
  328. if ( (unsigned int)sub_140657690(v34) )
  329. {
  330. v39 = *v34;
  331. }
  332. else
  333. {
  334. if ( (unsigned int)sub_140657690(v34 + 1) )
  335. v38 = v34[1];
  336. else
  337. v37 = 1;
  338. *((_QWORD *)v34 + 1) = 0i64;
  339. j_j_j__free_base(v31);
  340. if ( v37 )
  341. sub_1406574C0(v34);
  342. }
  343. }
  344. v27 = v62;
  345. v3 = v93;
  346. }
  347. v40 = 0;
  348. LODWORD(v69) = 0;
  349. if ( v27 > 0 )
  350. {
  351. v41 = v3 + 328;
  352. do
  353. {
  354. LODWORD(v95) = 0;
  355. (*(void (__fastcall **)(unsigned int *, unsigned __int64 *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
  356. v2[1],
  357. &v95,
  358. 4i64);
  359. if ( (unsigned int)v95 > v21 )
  360. {
  361. j_j_j__free_base(v22);
  362. v21 = v95;
  363. v22 = operator new((unsigned int)v95);
  364. }
  365. (*(void (__fastcall **)(unsigned int *, void *))(*(_QWORD *)v2[1] + 16i64))(v2[1], v22);
  366. *((_BYTE *)v22 + (unsigned int)v95) = 0;
  367. v68 = 0;
  368. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v68, 4i64);
  369. _mm_storeu_si128((__m128i *)lpMem, (__m128i)0i64);
  370. v77 = 0i64;
  371. v42 = sub_1406567A0(&v84, v22, 0xFFFFFFFFi64);
  372. v43 = sub_14066C1D0(&v90, v42, lpMem);
  373. v44 = (void *)sub_14066B5E0(v41, v43);
  374. sub_14066BE50(v41, v44);
  375. sub_14066D570(&v91);
  376. sub_140656EF0(&v90);
  377. sub_140656EF0(&v84);
  378. v45 = (char *)lpMem[0];
  379. if ( lpMem[0] )
  380. {
  381. v46 = (char *)lpMem[0];
  382. v66 = (char *)lpMem[0];
  383. for ( k = (char *)lpMem[1]; v46 != k; v66 = v46 )
  384. {
  385. sub_140656EF0(v46);
  386. v46 += 24;
  387. }
  388. v48 = ((unsigned __int64)((unsigned __int128)((v77 - (signed __int64)v45)
  389. * (signed __int128)3074457345618258603i64) >> 64) >> 63)
  390. + ((signed __int64)((unsigned __int128)((v77 - (signed __int64)v45)
  391. * (signed __int128)3074457345618258603i64) >> 64) >> 2);
  392. if ( v48 > 0xAAAAAAAAAAAAAAAi64 )
  393. invalid_parameter_noinfo_noreturn();
  394. if ( 24 * v48 >= 0x1000 )
  395. {
  396. if ( (unsigned __int8)v45 & 0x1F )
  397. invalid_parameter_noinfo_noreturn();
  398. v49 = (char *)*((_QWORD *)v45 - 1);
  399. if ( v49 >= v45 )
  400. invalid_parameter_noinfo_noreturn();
  401. v50 = v45 - v49;
  402. if ( v50 < 8 )
  403. invalid_parameter_noinfo_noreturn();
  404. if ( v50 > 0x27 )
  405. invalid_parameter_noinfo_noreturn();
  406. v45 = v49;
  407. }
  408. j_j__free_base(v45);
  409. _mm_storeu_si128((__m128i *)lpMem, (__m128i)0i64);
  410. v77 = 0i64;
  411. v40 = v69;
  412. }
  413. v51 = 0;
  414. if ( v68 > 0 )
  415. {
  416. v52 = v85;
  417. do
  418. {
  419. LODWORD(v95) = 0;
  420. (*(void (__fastcall **)(unsigned int *, unsigned __int64 *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
  421. v2[1],
  422. &v95,
  423. 4i64);
  424. if ( (unsigned int)v95 > v21 )
  425. {
  426. j_j_j__free_base(v22);
  427. v21 = v95;
  428. v22 = operator new((unsigned int)v95);
  429. }
  430. (*(void (__fastcall **)(unsigned int *, void *))(*(_QWORD *)v2[1] + 16i64))(v2[1], v22);
  431. *((_BYTE *)v22 + (unsigned int)v95) = 0;
  432. (*(void (__fastcall **)(unsigned int *, char *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
  433. v2[1],
  434. &v94,
  435. 1i64);
  436. v53 = sub_1406567A0(&v87, v22, 0xFFFFFFFFi64);
  437. v86 = *(_OWORD *)sub_14065F1C0(&v92, v53);
  438. v54 = v94 != 0;
  439. sub_1406565F0(&v80, &v86);
  440. v81 = v54;
  441. sub_14066F480(v52 + 48, &v80);
  442. sub_140656EF0(&v80);
  443. sub_140656EF0(&v87);
  444. ++v51;
  445. }
  446. while ( v51 < v68 );
  447. v40 = v69;
  448. }
  449. LODWORD(v69) = ++v40;
  450. }
  451. while ( v40 < v62 );
  452. }
  453. }
  454. j_j_j__free_base(v22);
  455. if ( !*(_DWORD *)(v93 + 344) )
  456. *(_QWORD *)(v93 + 360) = (*(__int64 (**)(void))(*(_QWORD *)v2[1] + 48i64))();
  457. v55 = *(_QWORD *)(v93 + 360);
  458. sub_14065C410("[archive] Current data offset: %ul bytes");
  459. v56 = (void (__fastcall ***)(_QWORD, signed __int64))*((_QWORD *)&v70 + 1);
  460. *((_QWORD *)&v70 + 1) = 0i64;
  461. v57 = (unsigned int *)v70;
  462. if ( (_QWORD)v70 )
  463. {
  464. *(_QWORD *)&v70 = 0i64;
  465. v58 = 0;
  466. if ( (unsigned int)sub_140657690(v57) )
  467. {
  468. v60 = *v57;
  469. }
  470. else
  471. {
  472. if ( (unsigned int)sub_140657690(v57 + 1) )
  473. v59 = v57[1];
  474. else
  475. v58 = 1;
  476. *((_QWORD *)v57 + 1) = 0i64;
  477. if ( v56 )
  478. (**v56)(v56, 1i64);
  479. if ( v58 )
  480. sub_1406574C0(v57);
  481. }
  482. }
  483. sub_140656EF0(&v79);
  484. sub_14002F6B0(v2);
  485. }
Advertisement
Add Comment
Please, Sign In to add comment