hgame ShinyShot!

就是mark一下里面smc

解法
做的時候可以直接鎖定加密部分sub_4014FA函數(shù)

size_t __cdecl sub_4014FA(char *a1, char *a2)
{
  int v2; // eax@3
  int v3; // ebx@5
  int v4; // eax@5
  int v5; // ebx@7
  int v6; // eax@7
  size_t result; // eax@17
  signed int v8; // [sp+10h] [bp-18h]@1
  size_t v9; // [sp+10h] [bp-18h]@15
  int j; // [sp+14h] [bp-14h]@15
  signed int i; // [sp+18h] [bp-10h]@1
  int v12; // [sp+1Ch] [bp-Ch]@1

  v12 = 0;
  v8 = 4 * strlen(a1) / 3;
  for ( i = 0; i < v8; ++i )
  {
    if ( i & 3 )
    {
      if ( ((((i >> 32) >> 30) + i) & 3) - ((i >> 32) >> 30) == 1 )
      {
        v3 = 16 * a1[v12 - 1] & 0x30;
        v4 = v12++;
        a2[i] = byte_405020[v3 | (a1[v4] >> 4)];
      }
      else if ( ((((i >> 32) >> 30) + i) & 3) - ((i >> 32) >> 30) == 2 )
      {
        v5 = 4 * a1[v12 - 1] & 0x3C;
        v6 = v12++;
        a2[i] = byte_405020[v5 | (a1[v6] >> 6)];
      }
      else
      {
        a2[i] = byte_405020[a1[v12 - 1] & 0x3F];
      }
    }
    else
    {
      v2 = v12++;
      a2[i] = byte_405020[(a1[v2] >> 2)];
    }
  }
  if ( strlen(a1) % 3 == 1 )
  {
    a2[v8] = byte_405020[16 * a1[v12 - 1] & 0x30];
    a2[v8 + 1] = 61;
    a2[v8 + 2] = 61;
  }
  else if ( strlen(a1) % 3 == 2 )
  {
    a2[v8] = byte_405020[4 * a1[v12 - 1] & 0x3C];
    a2[v8 + 1] = 61;
  }
  a2[strlen(a2)] = 0;
  v9 = strlen(a2);
  for ( j = 0; ; ++j )
  {
    result = v9 - 1;
    if ( (v9 - 1) <= j )
      break;
    a2[j + 1] ^= a2[j];   //每個字符異或和前一位異或
  }
  return result;
}
圖片.png

改表的base64

圖片.png

文件32位跟加密后數(shù)據(jù)對比


圖片.png

字符異或得到

DnY0m19iAgArMKjSP2Uvme8wOzb0iD==

從網(wǎng)上找個base64解碼拐叉,套腳本就好

題目的解法很簡單

關于smc可以看到

int __cdecl sub_4017AA(char a1)
{
  char *Str; // ST00_4@4
  char *MaxCount; // [sp+4h] [bp-200h]@3
  int DstBuf; // [sp+Eh] [bp-1F6h]@1
  __int16 v5; // [sp+12h] [bp-1F2h]@1
  int v6; // [sp+3Ch] [bp-1C8h]@1
  CHAR Filename; // [sp+40h] [bp-1C4h]@1
  char Str1; // [sp+144h] [bp-C0h]@1
  char Buf[60]; // [sp+1A8h] [bp-5Ch]@1
  unsigned int mum; // [sp+1E4h] [bp-20h]@1
  FILE *v11; // [sp+1E8h] [bp-1Ch]@4
  char *v12; // [sp+1FCh] [bp-8h]@1

  v12 = &a1;
  sub_401EE0();
  puts("Sorroundings...Weird..");
  mum = 0;
  memset(Buf, 0, sizeof(Buf));
  memset(&Str1, 0, 0x64u);
  memset(&Filename, 0, 0x104u);
  DstBuf = 0;
  v6 = 0;
  memset((&v5 & 0xFFFFFFFC), 0, 4 * (((&DstBuf + -(&v5 & 0xFFFFFFFC) + 50) & 0xFFFFFFFC) >> 2));
  puts("I see!It's not my fault!Wrong is the world!");
  puts("So..Now I should give a shot to fix it!");
************************************************************************
  scanf("%u", &mum);    //輸入一個數(shù)字
  if ( mum > 0x20000 )  //判斷輸入數(shù)字大小
    sub_40178C();      
  getchar();                 //吃掉回車
  sub_401460(mum);   //關鍵
  puts("And then,a shiny explosion!");
  fgets(Buf, 59, iob);
  Buf[strlen(Buf) - 1] = 0;
  if ( strlen(Buf) != 22 )
    sub_40178C();
**************************************************************************
  puts("Seems I have passed a test.");
  sub_4014FA(Str, MaxCount);
  GetModuleFileNameA(0, &Filename, 0x104u);
  v11 = fopen(&Filename, "rb");
  fseek(v11, -32, 2);
  fread(&DstBuf, 0x20u, 1u, v11);
  fclose(v11);
  if ( !strcmp(&Str1, &DstBuf) )
  {
    puts("Congratulations!");
    puts("The flag is hgame{your input string + your input num}");
    puts("e.g:hgame{aaaaaaaaaa111}");
  }
  else
  {
    printf("But Failed..Finally");
  }
  return 0;
}

進入sub_401460函數(shù)

BOOL __cdecl sub_401460(unsigned int a1)
{
  DWORD flOldProtect; // [sp+14h] [bp-14h]@1
  unsigned int v3; // [sp+18h] [bp-10h]@1
  unsigned int v4; // [sp+1Ch] [bp-Ch]@1

  flOldProtect = 0;
  VirtualProtect(TopLevelExceptionFilter, 0x4000u, 0x40u, &flOldProtect);//更改頁屬性
  v4 = a1 >> 3;  
  v3 = a1 & 7;   
  *(TopLevelExceptionFilter + (a1 >> 3)) ^= 1 << (a1 & 7);
  return VirtualProtect(TopLevelExceptionFilter, 0x4000u, flOldProtect, &flOldProtect);  //基址是TopLevelExceptionFilter 蛇损,0x401000
}

做的時候并沒有太注意,沒有詳細分析懈玻。當喵說了安卓的smc的時候才知道這個也是更改了某個地址蛤吓。

*(TopLevelExceptionFilter + (a1 >> 3)) ^= 1 << (a1 & 7);
[地址基址 + (輸入的數(shù)字右移三位)] 和輸入數(shù)字的后三位異或]
7 bin 0111
后邊3位可以與某個地址異或,剩下的幾位作為地址偏移來改變某一地方揖闸。

圖片.png

查看反匯編發(fā)現(xiàn)了此處跳傳導致sub_4014FA函數(shù)沒有參數(shù)進棧霎挟。
這兩個參數(shù)的作用是顯示出


圖片.png

怎么能保證正常跳轉呢喉恋?這就需要使用上面分析的悄但,將jmp short loc_4018F5改為jmp short loc_4018E5

jmp short loc_4018F5的機器碼為 EB 15棠隐;JMP的機器碼為EB,15為偏移檐嚣。

0x15 = 0x4018F5 - 0x4018DE - jmp長度(2byte)

那么跳到 loc_4018E5就是

x4018E5-0x4018DE-0x2=0x5

所以輸入數(shù)字最低三位應為100
要修改的字節(jié)的地址是0x4018DF 助泽,所以輸入的數(shù)字:
mum=(0x8df<<3) + 0x4 = 0x46FC=18172
(當然可以直接在文件中更改


圖片.png

這樣這個題目也算是完整了:
Byt3_H4cker_sho0O0o0t!


圖片.png

總結:和安卓的那個smc很像,基本可以歸為一類但實現(xiàn)smc的方法明顯安卓的要復雜不少嚎京。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末嗡贺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鞍帝,更是在濱河造成了極大的恐慌诫睬,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帕涌,死亡現(xiàn)場離奇詭異摄凡,居然都是意外死亡,警方通過查閱死者的電腦和手機蚓曼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門亲澡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纫版,你說我怎么就攤上這事床绪。” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵癞己,是天一觀的道長膀斋。 經(jīng)常有香客問我,道長末秃,這世上最難降的妖魔是什么概页? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮练慕,結果婚禮上惰匙,老公的妹妹穿的比我還像新娘。我一直安慰自己铃将,他們只是感情好项鬼,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著劲阎,像睡著了一般绘盟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上悯仙,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天龄毡,我揣著相機與錄音,去河邊找鬼锡垄。 笑死沦零,一個胖子當著我的面吹牛,可吹牛的內容都是我干的货岭。 我是一名探鬼主播路操,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼千贯!你這毒婦竟也來了屯仗?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤搔谴,失蹤者是張志新(化名)和其女友劉穎魁袜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敦第,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡慌核,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了申尼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垮卓。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖师幕,靈堂內的尸體忽然破棺而出粟按,到底是詐尸還是另有隱情诬滩,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布灭将,位于F島的核電站疼鸟,受9級特大地震影響,放射性物質發(fā)生泄漏庙曙。R本人自食惡果不足惜空镜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捌朴。 院中可真熱鬧吴攒,春花似錦、人聲如沸砂蔽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽左驾。三九已至镣隶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诡右,已是汗流浹背安岂。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帆吻,地道東北人嗜闻。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像桅锄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子样眠,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容

  • 王爽匯編全書知識點大綱 第一章 基礎知識 機器語言 匯編語言的產(chǎn)生 匯編語言的組成 存儲器 cpu對存儲器的讀寫 ...
    2c3ba901516f閱讀 2,407評論 0 1
  • 一友瘤、基礎知識 mov ax,bx把BX內容送到AX中。匯編語言有3類指令檐束,匯編指令辫秧、偽指令,其他符號被丧。CPU通過地...
    赤果_b4a7閱讀 1,836評論 0 1
  • 手脫UPX的四種方法 首先盟戏,查殼,使用PEID是UPX 0.89.6 - 1.02 / 1.05 - 1.24 -...
    小浪崇禮閱讀 490評論 0 0
  • 唐城坊甥桂,名字取得也挺東方的柿究。我喜歡。 剛來的時候黄选,看到這些店蝇摸,還以為是多年前婶肩,像我們中國那種買一張卡,可以在電話亭...
    花花噠世界閱讀 334評論 0 2
  • 春花、秋月啡专、夏日险毁、冬雪, 四季變化都是極美的们童, 歲月流逝畔况,世事變遷, 你我已不是昨日少年病附, 我只愿能夠不改初心问窃, ...
    悠游自在閱讀 255評論 0 0