From 043781989dfbae8527fd7f51afa9ffdee170f2ed Mon Sep 17 00:00:00 2001 From: niushuai233 Date: Thu, 15 Sep 2022 17:30:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.config | 18 ++ Assets/Image/steam-token.ico | Bin 0 -> 13665 bytes Assets/Image/steam-token.png | Bin 0 -> 12904 bytes Entity/Config.cs | 14 ++ Entity/SteamGuard.cs | 24 ++ FodyWeavers.xml | 4 + MainForm.Designer.cs | 215 ++++++++++++++++++ MainForm.cs | 93 ++++++++ MainForm.resx | 362 +++++++++++++++++++++++++++++++ Program.cs | 25 +++ Properties/AssemblyInfo.cs | 36 +++ Properties/Resources.Designer.cs | 91 ++++++++ Properties/Resources.resx | 131 +++++++++++ Properties/Settings.Designer.cs | 29 +++ Properties/Settings.settings | 7 + UI/AboutForm.Designer.cs | 136 ++++++++++++ UI/AboutForm.cs | 32 +++ UI/AboutForm.resx | 356 ++++++++++++++++++++++++++++++ UI/Set/GuardConfig.Designer.cs | 135 ++++++++++++ UI/Set/GuardConfig.cs | 95 ++++++++ UI/Set/GuardConfig.resx | 126 +++++++++++ UI/Set/ProgramConfig.Designer.cs | 52 +++++ UI/Set/ProgramConfig.cs | 20 ++ UI/Set/ProgramConfig.resx | 120 ++++++++++ Util/ConfigUtil.cs | 63 ++++++ Util/SteamGuardCalcThread.cs | 69 ++++++ Util/SteamTwoFactorToken.cs | 107 +++++++++ XXXSteamTwoFactorToken.cs | 47 ++++ packages.config | 56 +++++ steam-token.csproj | 276 +++++++++++++++++++++++ steam-token.ico | Bin 0 -> 13665 bytes steam-token.sln | 25 +++ 32 files changed, 2764 insertions(+) create mode 100644 App.config create mode 100644 Assets/Image/steam-token.ico create mode 100644 Assets/Image/steam-token.png create mode 100644 Entity/Config.cs create mode 100644 Entity/SteamGuard.cs create mode 100644 FodyWeavers.xml create mode 100644 MainForm.Designer.cs create mode 100644 MainForm.cs create mode 100644 MainForm.resx create mode 100644 Program.cs create mode 100644 Properties/AssemblyInfo.cs create mode 100644 Properties/Resources.Designer.cs create mode 100644 Properties/Resources.resx create mode 100644 Properties/Settings.Designer.cs create mode 100644 Properties/Settings.settings create mode 100644 UI/AboutForm.Designer.cs create mode 100644 UI/AboutForm.cs create mode 100644 UI/AboutForm.resx create mode 100644 UI/Set/GuardConfig.Designer.cs create mode 100644 UI/Set/GuardConfig.cs create mode 100644 UI/Set/GuardConfig.resx create mode 100644 UI/Set/ProgramConfig.Designer.cs create mode 100644 UI/Set/ProgramConfig.cs create mode 100644 UI/Set/ProgramConfig.resx create mode 100644 Util/ConfigUtil.cs create mode 100644 Util/SteamGuardCalcThread.cs create mode 100644 Util/SteamTwoFactorToken.cs create mode 100644 XXXSteamTwoFactorToken.cs create mode 100644 packages.config create mode 100644 steam-token.csproj create mode 100644 steam-token.ico create mode 100644 steam-token.sln diff --git a/App.config b/App.config new file mode 100644 index 0000000..59df92c --- /dev/null +++ b/App.config @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Assets/Image/steam-token.ico b/Assets/Image/steam-token.ico new file mode 100644 index 0000000000000000000000000000000000000000..a5bd0d563c53dd036e32c299971fdb89cd388e2f GIT binary patch literal 13665 zcmZXbcUTiowD&i3=>eqI;7<&__a=lQMIeBPbcN76NQa=5fYLNbktPrjkg5dfC<+3R z-n$}Q1nHf3z4!k2!joqglAW2IJ#*%q&-VlXAmH!69|*t;=*s{AGkBh0d{>8tlARJf zrMaVvK>mC8-;06_JXrg^MS+KFKDw6v06^RM?*-}he(MN;E!;ueHVe+#$_>e38msS) zT0Qg-e#)A8n~4k@?m8t1jM}62bZDU)V8`Voe#vfpxN2k z+S;(RT7vQ`Oc%q@eH1s9eSq!@Sx7Kl2NL#RL%u%@@xe?fepo{Z4RcIUIb^jmHxC4$ zTwe%b5LT)JSq~e9nsk3)C-eqG$jMg2!lk66O*Xd+xiN_@yuFuT$Ed;CK_G`r!aWQj zf5iYXNHDIc=`<;pilvIu${1I~r5?>D=Vcw?>A5wL8RCt)WJePN(lM1nH&z&jDhMsS z>3SmfTY~>4){vUBPeYi{35)`VR_&1&W`K^=o*AI|dEBhHrJq0*LqA~k>fos6s~OQW zgaqT7t%Kt^E(0FZS{Wq_^%CC0(!RaBFI@7O*|f@qd{GM7duJ_tv6P6Fr7FAbhb1bq zyrcy6id$}nWeW)BRlx*-b1W#e&4$mDT#*8dB=&@7@cGxQ3=|5u(B#ye@<=9#Db3VvjsH|mF$*a&JGp5G8XXqcP`|EPghn}qSJI86{U>GYiz(C z+Qg}HlNYCIVwpImApxDz-`{7QFaW5@2hx|Ch!pWXv2SD`bzdDSR^*0(;4tJl zn^XzDs>(|dy$;01Rq8Mb9+e==*q*V7MT&XwInZCTQh$?%Ym5bj|}h#j1b*{ymJ6Z=TXB zUi)S2Di)~|FY;OBzaPMGU+4lI_|K&m4Opaz!!sYvAteC5+z<4+9i*4Q?!UoKOL#!1 zZn=^3;yB6d;pk}4q+E7y!_7wrGAXRo?O5afUI(ggtDR>vXzQIgOtMRwU}^1VKl&bM zU@U>Im`bgpzu$D>%Y6>d)}9sm14Y_NlDrHN98Iuu|kS9I_t%u(V^HNsXpk?BIY}(lDab;NTg> z<7H%JBlC1`T(aTm3v@ZruGtHu;`|<5?1s^q!;_Q8cVKDvS@EfZTxbVY9fl#zTc06! zl5VOed%Cy;2aT1R3mQP*h$2&wpu1%5sB+jCjOq77*%H}bgNg_g)+aB$<1Y-dA6oq_7^RBE&}x;M-Xh%q*P+;8h&@d_AMXc>4(ab_nJ4dR zHYS*8QJ3@`zjbfyHsJC2j26|MsZ^vkB%CX^yVZ!cPE^f)g$?g{b>n%HrY{iZV6Bf( zqbc$-{B-<0D<2~MIx9b+duhu7BW^h2xKairL&PPhX}s)L7(Hh$_1|oYd?Zdq<`FN> zYfMzYsS*2dsR08VGDyU>C0J`Rw22>=L%FCNp!oFRQtN)O`t6`L=26gk+bQj71GMw& ziZXf5^O!35?N{PGXH;8L1DONZYieu%(gE32mZdj+kboCdBgfrxe5AsnTJ&`3Jww8m zX3$pC;^N3&V;&RL=uc(?Xbd4PE>5Q6UgZPh8bvDev_D4~JcM&`w3X+KXwUPHHei2r zi}8SVd?jfI3Z+WGZ#@xa5ycRT8~Rg9saar}q)C4~0@Td(RG@hJcF^f15yDlZq69od z21JMmi3p`GOhur+k+lPVoXWkPtEsp$yQ41USM{TgLoofnz-_1v;Gji;Cr zeK@gQC%p>`=pb&Q3k_llda~TpkrOc@g~p(N7mf*jo|RN14Z6U-I$D~#Wf_wzrrR;4h z5vLzof90gYiBA?!LyD4!^A&GcfWDcSMa=fxmcEOa4ScG$z{O66GU9_BPVF2hz)mxE z{7xx!pv+iJTc{qV4vj{or|aP!q^R_3sIFb#)B^UGc^j zw*Tk5ULAW*9*Kf0%0g;y-~wL(=R^d2aIz$|YJetbANg^v-iNXG5;POu@?9*vATmFQ8}FvBSd&6#R(o>)!7+c!B!8g-;rz*xd^HoSG47v-eEFoRl%)!(H@8@N zyPd1!3ivo_^g8?VC&JMbKH{CZfQtFEVT zO`UbUbpj%<4!^$FSK$2!06pUw{g6TXZ&ykxsi;gnT)%B==s`y0%q!%d@yW?x74!mx zHQwH$fR@zfzPb6BNm5c02V+8vH=RBUIANV#UD_HyiqH>W>^ZtO!uvQDtw`)yyEG92 z*>;E0vHxKPqX?N2^%tiH%`sV}#4bA{cq`1BE2>QkE;Hag!}pl9L=cyE(3vVWf=2ch z9dz0?iSI>3s-4Fey-sQ?Ie9B4zioXrfr_HoEsWK_Zn z+KY$_O~!8cJ>Hb^Z;a2{PDa2|zCNr~ zI2l*+n*DfMUS3{?2oUrm`~{utPO$Q2)XDf9SEu+NSmEAz%`!7A^h=$v(IanLE_GXO zJ5wg*Vyt2(oo0z^-WNhjqsRau2wZA-;fk@8)8=pdQ>%KoQQF8+&ukQx)ER@xFVL{a zzk)&AUaQ*n$z(v>g4J%T9iylQW*zhn=M5H0C9ZcJS6Hl>uNa{b`tZOYSlW(?zmG-T z0Ju)>0c24)e)p&8{5YEu8cQE^<{+R`qE$2$vDc~~ zMxJWhSIMQmzAK>iTt3-f0G%e9IR6$a=u-Fn>ob;WV?D0aykr6e^t(89=ib75C(BC0 zd5eWo<4^g!^P5DwegL=uNduj`m1d0Gh<#Vdto@dTIqC2EgIP*q{DkmgA0gmym*&%@{U@MB}Vm6%JSz8A_{Q+xgDpm?G#d-Wz zduUl7-S9er`@30OR#H<_)4K&YhXVot7UlaBPG&RS6YCmXtcP4N#A1}`f^o>Q^>1~t z85q%eVWI6$@OBfuTs;KUd#2_u;?zb07E}0EX=(v=L^pqmWotMLm^;l7<$>drW3Rv` zaij3L&;`Z?rP%t|Bn@1sI?jG+ZLA1HUJ(F9?S0a&daf^)+?$ZYsUEsvG;o%23-RmZ zW0^-^_{bw_wY>*M^u;e@t@Ck{4K$rQ0pb+UWfigQGc9d5(SU->vdzDI72_K)4e%lEnxNguLCfUG>G+h@E57&C zcH@>f8;fR0(&MbDBc^##h5LGq`7@sz10Vs%cAv%f1Z@AXXgHo9Ij^jG&d?sHf4Al> zYUPSNgoX$cg6^0j|po`7*QK%|+`HLp8C;;~(*_Rlv_`U_6vy{@KXQgeCd58yr0^ zJLi~sH^BHmo_OciHJKlph>+?lZ&z0~%7UmkSl?bf*Ud6B!6Gl1-}@1Xkqd`F2+%R6 zUhtYiJ^soGO%L-XADo}h`+HkgU|U#$y7SxH*I6oBz?y*%JG0@Ciy2DjR~KY$r=8lx z-Mz0_=Hbe7T6C8FFhu$CcnJ;&NiqFpf{6QP(gK8*D7+*amwIT*-#=~e;h4B3`H(9K zl>0UPF-UPwaVxeNuwQvMhxUM~-`;!e`h@@OQ%M=EBsua$`Q*od6Ch=`wHyiS{TP#p zY2h4&%4U5K+k2RqwWmw+Uf5uKcz9C4me1iyg@2oz=x>#N8eA0Hq4mUE}{2ABE`h8}Qo zTD5^UN&rCacv@pb&Kq-_ef2;(78c<#x}};;*cUh8mO>d+rUYImLG>T|06R?)p*kr? zXP3F(vi=qWF``bWUV1HGRTpy<&kn8IWC-78ZmY(b!Lkjs$g7mr#DtY z5C6PAgD1Xr(fr7AyboA$7Su#6NK*5gZn6t*j#r-X)fG4Fg?_LI6)t|;r5Qut`k46C z577G0_GQ`)DLc!zy_hv-7N@Ed?IL2zHv%lh*q0FNm$=DIa18rMBZ<3jj%4URCK0pB zxS4UG`J#n}kBOi*PBZvb{`T32mg7qR_W<(USKl0+e^+OohyrXcofw9=RL#Qtn$7BGb3*Mc*44Nn2q}IuDFKa4^@i@(aHJ(KD78SDB9WWr=>rWZCqwtkX6o2x^ zU9hG>0@wodo>qwTQEu+DAz*2*fBXatVA+qdQC-AZPZ4@2R)E)Cq048;jce5hP?Mqh zOIPawA`nEKD;Ho-7sN@6>BheWn+3BF&NCfYEl7o3g>D*Ticd;^j|ajRwEoJ)(mRJ# zn(8TB?`X5#BGK|Tjh=>Jx%FpeX2fW$NPt^76!FJdLrYlGUA>d;fV>{{G~`{wn=c2X z{PAOvK#gR&9v92Aud>I+2UDt(6wh^U)EOpgs*o8!q~NOxKAH=%h_5W7!i`o#X4mVE z*$C%iU^qhg8LA5})r04g?ND3ezaXT0QW%p)x>s`-$L^-eC%?BDI4Tc?mvX89^|KOY zKJ%Z1g%)C)jP)9+tn>J8BUUB$LgE}|MPf3YEbq-zc|UmY0PpVZuEgAN2T1N&w(a&k zOzK{WOe$gu+@u2#ACia*^1L%kTqXCMfRgKo^e&M~y|U^!5f~$~R|%4n-(9Jn-~xsf zO={dJ?OQ8kBhp5XKnxc`a<9Mf2=lh5`nDN-*#gqC9$(4pu%hoV(^h{LHY1Pz1E%wu zuqLJsjC#83>`owVw53MNQS)DJLk>oZkBm0jx=;~}TOG11U1vA-W1PxJ{C#!hR=B!>pN)Xy4W?c~#hq zeAI`h8^sI@tZNT{&&CY$6IoBsb zJVc(UgO=N{t)Bprk#7qRYwvfp#M-*Lxv_I6AZ$r^pS}~Iz^vKy)!`L|#OcWgzk-D2 zl!jaR7#5&Snsj^I{I2+(E8df3F7mVh%%IN{ll^a?Z7?p5r}DdLYtaA1_crzwV*4;_ z{3x%=%E}172tSkCsYunhek~o`H!zyM*Dq^KKA0OI`)VDKwffEx>XNYSvmkqlCK%p7iGk&iGg4AARy;}g8}8rDpBvhPvi z)Q_$>84|G!GYH`83V^ow66*F9o@=1X|FD-&WKVf2&s;G~uffUu?CVNER5grKJqUCzDqPotEkhc}Iz|ZR zW?*nK61sQyWAOl)JkW7TP>#kN#vE}HJCRFmd(9l)TUEH1L%asd9sK)*v-9&RW^LV3 z@+6?~=H{)N)SawGh?%3^A?|ex)6;e>xpC9yw{ZB7d7*JgfQ0LCarsz;?K8CcW@CWLTal%^K{Nj&~N z`37{ia*}&NEz^2P61zWP%+p0WL}_kzJi&Hc>J9G2ipGp#kf$uODS~&G&&C>}v+^4} z&)(*3yOR%6fmSx;n?n_rS6F!M)qXTgj)--8>|V3x@oo%9+N>|9-u6I_$-%l3>-m@T zx6t1iLo-+;%Tc)0&x`}Vhs(X`93aSRsR=Y=STE)X>Wu%?jO{!Q-!RurUhAFd;Vles z?~ArRb7%C~h%bnk{Ihn{-$#ELK+dgqgW>A;32I81WEgvMJ-Uqp;=!1=(l&V+SY~j7E1qqOJTPx`ZY-OD zxPH4WaaxXB+fmc^kDw9FB)8{TP8`0L{K<&z6WxM~g7-hp&jJTbKqY7U;4rc*FgY># ze?+S0$6I$00St;#+^hbJU&+_`-`RqgVsAe3Y|C@pBZE;yL}aGEq2X#eCAuxogMAPq z*5Bk_adbM+%rP@H(0LUd80A1V&T3lYJ3KBmGP7`Hvp1qVoLJ3{9w+!k_U3C`2X!H>n(ISA0q{ zy~_owxJ+sqP$O)UuRFTJ($)?z3Uj18(E-m?7&{C)#oO*877)&q>wF=Z9FWBc4U8#G z=W)K@gD{Y}$7K;4)?}4eEDWdIWO$3WC2ajDbqjyoAEExGRHyUK!*4dFZ(hwQKyIto zAHZJNZ9gZ%AXcYI>BRl3f2bKhymng;GK056>e=wdWCDwluuy&@(=h1JMTx7b7*2RS z=1rV~v_3pv3sSeKXnuj;zsTZ3$a=pgRaGiW7C8!Pt+P2YCo6O8AJdVop6kss9TV&0 z%35~^=m(+d_Fo>>8UeE;i#I#PlSzI2LUVXaC5S*4*a1QIf*9da4k(Le_@ZuiQy$rB zPSTM;=hxI8r?iu<7S3TU_l-s6Lx_l*HU84Z=jYSP_NU!0F$O}TklI%RkatVa?V zXH1iLOfq3qEpE&-oYMaGeV3PIx3MWTM|z9*m6M2xp3ThYs3XJB`g+=x^>H*-aw3c} z8SCd~Wi_)I8+qKkHXnMEoc7ZSlio%;r@Uju_F~$Rl&6u{ZbI5_xA^ncgtdo&^DiH( z>ORG1(KRVUdf^8F0ly=jY`b4j)w2{dY;MTqt1q>4`(5#Sd9YtfN3Quus(yJY9G7~UgXOpw zg!8HGUElQt`iCfK_VlSBM~IIin32%c;<3=H8qq(+MT()tZ@4@ z7TB6B_3K;T6s2Pzi2k`fEbraZWWO@e+Y-ZB$D8aN^Z@|V-+#3Lgam_u1nr_D5H?y+ z;rhg%S76qfG{!Q7z#G3zu}wa$=ZSxJOKzNInvJ7$j<&;!q=P_Jm)^4hWS#&c(qcqA z9v}^VPsJi?o!$U5ROKY*T~fb$${Ewar7q1rH|Co&V{#+nqHT>0fBV&6Jkr!l*zhse z*_Q@4y@^wO#p6MZ>}}`^%9MXzJ0B}BM z$Y(MBvgg+`Hr08$4jN!Z555h?H``q$H|5yb*}cej?#02<93>ULR-YP-oY&I-G(S!) zct5yC0cc&xd$x~CtE(O&?0J;>h_ z)dwI#fg*cLvraN>J!4~&fgML>?x1=qL6*%bWlBJNkB<;;s-x4b(JAf)rpn|i#wjIq zG4xUWNXI&sGi2{eu5L?Ae^&epEgj%bzWD^mF{A>CLqXXGI&{R@9ipXo^3H+vHjSA% z35X?}^u#p~Pr+1sw^jsqE`ruEfe}Y!z1^W$bi$2pdQmmw!RP@7RM8xLHbLww!IvMx zm%WRzC%^hDf-@B!$)U62S07e4Hiq!PorKWaVGQ>WX2B$jO$X$D3sgG|oP9@K+<+)4 zJqXgZ=-5}tq?`%vxp&q6P=dh_6(2J&+4sH%R``S;P2)v=)%49(41lWi60UMLBO;86 z7fApCUHHPyLIHO-x5$y{>82s_nPmg~mqSZ_kgtmaLE?MYE_DS(&+luo$c9A53rPKU zwU(4K`^?Ewe{jlZ|MfLOxF_ggz}|S0wTnV=4hzA_pk*@zC@$0$gT3ZFh~jPE>bNbB z7A2F|D@$GyPDS?1QS)Q5NZj*23G@~*3j^%BBH2zdQZSgj02|6YH9>OxsSOd(fc3*+ zcN;)h*vwSWkK|pNri496`wl?U>xtifp+INlBb@J!=6pM1p_HUtyTgy(rs8{b2X6NQ zEGg({dPWQDT>}SV%7W^hhL}AhS$vqJyM44A_>w+_Xy@^L%SZzvaVxz>g7o)%gKX)t zpA6ZKV6jh~HgLCyB zzpbHIjJ_|t;qNveL)LL!2 z0`xuFmP%;7M1Zrqr}=;lgWiIH%?s(i2iC=b2(Dq1QAc z(h)O~@2;`HLT_-Vgz1s4_CO}_7Zx!}%&AG8Aj3GKvx?yhF*Wr@iLTj2kaKw}1yoySY-4AOkYJ=BFHt5A+pD0a<9+-S02|Z*zD{3% z%dFwJMFz6zb!$?#v#Hp)tZnktt>bDP&zZ(;t%@S-fs<< zd$}-fw3`qvg(fe?a)Ftf5N@^+m_7v|(JeG_T{@$Nqvu6;3QxO00Ew~W{s9+eEp0!N z({ATGMEJpnH5(>ZCUwLr?yQ}y)-&v;VuRT|=)e5z1}O@^lMYEW&(qi?`PD|aK+H#O^`qzIrNqHK(%(suz5XDh zIVFdIVzmFBI(+#85cM}XXM{D$SncX9{>0e$#_bs-Vnk$A5_Gjb5)b?3n={)vl=3bvZfqYJWRtPd~1;#vT~&0 z^H!5h*UNqBtn#0JIBZ3u{HPXg1+VQJ$wB z#n8tC1_Vr(z4gDw24{k1>1PJgu}k?0;{=hWxNLSc23-=1W+RJezRtl z6b=lC@1=pv0yT4}=GUkY!FgsEK5F^`8%mN|_-(i@0RTGc-mNCAImf;gqANMvoY?LO zM`FMT+GXaj4d{~EOUVkkTP2$rA|iE_mDLW`BWerck_`nO^d$H$b!}xD+S3h8NykMfSEr3`ERwy&P6R*lnZ-A28Ny&ELFOU(S*M+Oy?- zAGQZ>j&pq@C;^kVDI{7puM%9e6y3KeQI}ZEy-B>vK*c3k?nE3*UmaX;DvI?3Lo*AH za_&i4-nm_JE(nu!bsPOpN)VcoiN8xdXmYdzj9BA*9je|01r0w#hfh^(k^Qe8PHAoj zH!j}<_Zx>9ymzIF%Q-25fI$4GMmCrW))->Gjh%<-A`;fLz<`g^3d2F&dE6Lz+<-&y zqmME}`rh9rO#~<}!Oh@+9Pp}}h|!8dwHfM#Y){rcijNa1kt@cUz?YwbO3dVg#55!) zs5uBV@od?=l|UO?JAyhzIxtUN^oLWv6pugDf-nDYpjy|^YkZI0wE*VTS7n_H#jp>+ zo0IaGnRh!Z@!$sl7f(+c{+L@URRDm_IwILA#O_9RifdR6D}!=*D17<)TKG;>4CVCn zYdRbgs8`I+zrtk%k^lkyIO31u?@s+4*`eRlkgA}-aVNGs;P+&$CJxJDW?>-)`0xw* z*hHyfjY(=m)AekkZIcf~%}D4s)|>RolxR99V=<8oCCQwby#!Mnb}wPg7oZx}DL&EG z*Vn%S-IyuB8QpIkcfCG+f=2oLmZ7s(t^2P6_vp@he7+b~A zlmDxEY+`aCsrgd(F6XjDNRns`2FB|f^2vW_U3Lqu+V`F2c#vS43*+2j5 zpeUf}p!1kfRbqbj-?{8O7xhfk^UE5c}D&)Am=D_7MADUwEE?D0L7L-(15+WB3xndLGkU~T*Z)Xq7-sMbBtFHUj8$3$F=QK2A=0Jgiv2Zc(wIG& zgq{nn%~_r{%$lt_U`3});v;fF&4VZylufc1*Hp;{5B!2Ic>G%XSGgM|ZeQNJz6{p6 zgL+R1RxvxPoqTZ#oP+byFp~f8bF2Tepprr8PLFQ>JYM)WL*v7-O0~WW(OZlJy6t|Q zV^2H)2K!5(Mn=@}CG|ho@PaTZyNhZ8<2~2#K4*i`@u6*@Y7b7u6{nkmy=MLo*Dw*~ zkEfU9)dz@}NWl7P$W9J+R{*F2#CaX>u+s(PlfJdw=fu08Q3LA#SFEhn>Ro(TFd~Y{ z3IARjn@Re1QdC{67>krECcn1LTWIJ&HT+9QObFr($#k98}H1vItHG)s8nbtRad?aSlMq|`Mr5FSE1Ey z^!P#h#>gW;OHY~GTW57Tx*0?*M=}(JS^>-R(EC3x zY=6s%@6iMKr)K%w#J3)U5T3L{sKoV>;G4sku!aC$c8;5Og_AA9QF-ZkOc2LpoW za?IuX`|ZsUC^N|0!wN|*2$uepQv}5RCOT`#CBUxRx2f<++7Ce?jy$K8Qm{q=C1U;2 z#~lCp_J_PL{mvw-RH$iiek1|?VWMIYd0f^L35 z4o4+HS%@Klkofgs@0MXqrIk^6#SxCwFtT_&D7?nU>%dFI>hZP5-nmNiQSM&5{LA{o z^dOH6&2gBC=x%$%rLGQQKpKGiZaXh7rWPxZpoChabbeggr>hT}1U1eyjTrL9DqUPxzc8$FMRuXsYQ- zC2F_B|7sOtHo=BK%+^lX1`W`a;O@0F6RJb++Xtsepv5lg<`}mC4PF(uIm*Rpusr{V z2IdZ8^vPZ4L81axv*=Gy{z8kalk0$(5boZo4Fno7+RF_Dyt>v`xizXV)e6gwW!7L+RqKlijsw{#s~d|IssR-i2Ve+!!U+5ilUopUH?Mq zECW2Y#&nWoQ3U`+W4M%<{YnN{B&@uaNPanyt~1IRdPp_5pdZP3_5HM2w59hXJj817 zAnbOyQ|WZ{LhI6LdG2em&CAHM95v3yOEI}i8H{2*_>Gi*jgR~0+(dEr5cm^Zm=vAa zv|%}|lvXOgl9yU^5c*)@bJ#zC#r=dEK(k6d>{#4f>4Hq-ta#>r9N4vdJV}q|(G|7Y zmq44{KRx9|%J`l42a@N?CXsomWsOkn4=+XWM1&mheeZY9KW>^RpxOd@(Js=8;5SW@ zm^1Q_+>Y0IpxIz1^sDaTIwaf572Vuz%T~C0E%n zaq%bTmaB$o%Yz@kzlr+YIN*_v!@&MyfP7G@P>Xb1dNgr& z^ZxlX`FvCY0h{eS>f-n0)Z4;JY5m<(_mrGSuj2A0^#IyT=9&E!hy3;W{i&x&1 l?DnNa@KW{@!u@kKmH;8rB^m!1@Y_+q9j&{FDh>N5{|`Iewfz79 literal 0 HcmV?d00001 diff --git a/Assets/Image/steam-token.png b/Assets/Image/steam-token.png new file mode 100644 index 0000000000000000000000000000000000000000..453d67825705ab03d653d56f50a571fe0a5c52d6 GIT binary patch literal 12904 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 literal 0 HcmV?d00001 diff --git a/Entity/Config.cs b/Entity/Config.cs new file mode 100644 index 0000000..ef10cdc --- /dev/null +++ b/Entity/Config.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace steam_token.Entity +{ + public class Config + { + public SteamGuard SteamGuard { get; set; } + + } +} diff --git a/Entity/SteamGuard.cs b/Entity/SteamGuard.cs new file mode 100644 index 0000000..10eb480 --- /dev/null +++ b/Entity/SteamGuard.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace steam_token.Entity +{ + public class SteamGuard + { + public string shared_secret { get; set; } + public string serial_number { get; set; } + public string revocation_code { get; set; } + public string uri { get; set; } + public string server_time { get; set; } + public string account_name { get; set; } + public string token_gid { get; set; } + public string identity_secret { get; set; } + public string secret_1 { get; set; } + public string status { get; set; } + public string steamguard_scheme { get; set; } + public string steamid { get; set; } + } +} diff --git a/FodyWeavers.xml b/FodyWeavers.xml new file mode 100644 index 0000000..a5dcf04 --- /dev/null +++ b/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs new file mode 100644 index 0000000..655446b --- /dev/null +++ b/MainForm.Designer.cs @@ -0,0 +1,215 @@ + +namespace steam_token +{ + partial class mainForm + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(mainForm)); + this.menuStrip = new System.Windows.Forms.MenuStrip(); + this.SettingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.GuardToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ProgramToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.AboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.progressBar_refresh = new System.Windows.Forms.ProgressBar(); + this.groupBox_display = new System.Windows.Forms.GroupBox(); + this.label_guard = new System.Windows.Forms.Label(); + this.button_recalc = new System.Windows.Forms.Button(); + this.button_copy = new System.Windows.Forms.Button(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.timer_time = new System.Windows.Forms.Timer(this.components); + this.label_datetime = new System.Windows.Forms.Label(); + this.menuStrip.SuspendLayout(); + this.groupBox_display.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip + // + this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.SettingToolStripMenuItem, + this.AboutToolStripMenuItem}); + this.menuStrip.Location = new System.Drawing.Point(0, 0); + this.menuStrip.Name = "menuStrip"; + this.menuStrip.Size = new System.Drawing.Size(644, 25); + this.menuStrip.TabIndex = 0; + this.menuStrip.Text = "menuStrip1"; + // + // SettingToolStripMenuItem + // + this.SettingToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.GuardToolStripMenuItem, + this.ProgramToolStripMenuItem}); + this.SettingToolStripMenuItem.Name = "SettingToolStripMenuItem"; + this.SettingToolStripMenuItem.Size = new System.Drawing.Size(44, 21); + this.SettingToolStripMenuItem.Text = "设置"; + // + // GuardToolStripMenuItem + // + this.GuardToolStripMenuItem.Name = "GuardToolStripMenuItem"; + this.GuardToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.GuardToolStripMenuItem.Text = "令牌配置"; + this.GuardToolStripMenuItem.Click += new System.EventHandler(this.GuardToolStripMenuItem_Click); + // + // ProgramToolStripMenuItem + // + this.ProgramToolStripMenuItem.Name = "ProgramToolStripMenuItem"; + this.ProgramToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.ProgramToolStripMenuItem.Text = "程序设置"; + this.ProgramToolStripMenuItem.Visible = false; + this.ProgramToolStripMenuItem.Click += new System.EventHandler(this.ProgramToolStripMenuItem_Click); + // + // AboutToolStripMenuItem + // + this.AboutToolStripMenuItem.Name = "AboutToolStripMenuItem"; + this.AboutToolStripMenuItem.Size = new System.Drawing.Size(44, 21); + this.AboutToolStripMenuItem.Text = "关于"; + this.AboutToolStripMenuItem.Click += new System.EventHandler(this.AboutToolStripMenuItem_Click); + // + // progressBar_refresh + // + this.progressBar_refresh.BackColor = System.Drawing.SystemColors.Control; + this.progressBar_refresh.ForeColor = System.Drawing.SystemColors.Control; + this.progressBar_refresh.Location = new System.Drawing.Point(12, 28); + this.progressBar_refresh.Maximum = 30; + this.progressBar_refresh.Name = "progressBar_refresh"; + this.progressBar_refresh.Size = new System.Drawing.Size(620, 23); + this.progressBar_refresh.TabIndex = 2; + this.progressBar_refresh.Value = 30; + // + // groupBox_display + // + this.groupBox_display.Controls.Add(this.label_guard); + this.groupBox_display.Location = new System.Drawing.Point(13, 57); + this.groupBox_display.Name = "groupBox_display"; + this.groupBox_display.Size = new System.Drawing.Size(620, 313); + this.groupBox_display.TabIndex = 3; + this.groupBox_display.TabStop = false; + this.groupBox_display.Text = "Steam Guard"; + // + // label_guard + // + this.label_guard.Font = new System.Drawing.Font("微软雅黑", 72F); + this.label_guard.ForeColor = System.Drawing.Color.DodgerBlue; + this.label_guard.Location = new System.Drawing.Point(6, 25); + this.label_guard.Name = "label_guard"; + this.label_guard.Size = new System.Drawing.Size(608, 299); + this.label_guard.TabIndex = 1; + this.label_guard.Text = "令二哈"; + this.label_guard.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // button_recalc + // + this.button_recalc.Location = new System.Drawing.Point(428, 384); + this.button_recalc.Name = "button_recalc"; + this.button_recalc.Size = new System.Drawing.Size(99, 30); + this.button_recalc.TabIndex = 4; + this.button_recalc.Text = "重新计算"; + this.button_recalc.UseVisualStyleBackColor = true; + this.button_recalc.Click += new System.EventHandler(this.button_recalc_Click); + // + // button_copy + // + this.button_copy.Location = new System.Drawing.Point(534, 384); + this.button_copy.Name = "button_copy"; + this.button_copy.Size = new System.Drawing.Size(99, 30); + this.button_copy.TabIndex = 4; + this.button_copy.Text = "复制"; + this.button_copy.UseVisualStyleBackColor = true; + this.button_copy.Click += new System.EventHandler(this.button_copy_Click); + // + // comboBox1 + // + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Location = new System.Drawing.Point(199, 385); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(223, 29); + this.comboBox1.TabIndex = 5; + this.comboBox1.Visible = false; + // + // timer_time + // + this.timer_time.Tick += new System.EventHandler(this.timer_time_Tick); + // + // label_datetime + // + this.label_datetime.AutoSize = true; + this.label_datetime.Location = new System.Drawing.Point(12, 389); + this.label_datetime.Name = "label_datetime"; + this.label_datetime.Size = new System.Drawing.Size(105, 21); + this.label_datetime.TabIndex = 6; + this.label_datetime.Text = " "; + // + // mainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(644, 425); + this.Controls.Add(this.label_datetime); + this.Controls.Add(this.comboBox1); + this.Controls.Add(this.button_copy); + this.Controls.Add(this.button_recalc); + this.Controls.Add(this.groupBox_display); + this.Controls.Add(this.progressBar_refresh); + this.Controls.Add(this.menuStrip); + this.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MainMenuStrip = this.menuStrip; + this.Margin = new System.Windows.Forms.Padding(5); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "mainForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Steam令牌计算器"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.mainForm_FormClosed); + this.menuStrip.ResumeLayout(false); + this.menuStrip.PerformLayout(); + this.groupBox_display.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip; + private System.Windows.Forms.ToolStripMenuItem SettingToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem AboutToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem GuardToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem ProgramToolStripMenuItem; + private System.Windows.Forms.ProgressBar progressBar_refresh; + private System.Windows.Forms.GroupBox groupBox_display; + private System.Windows.Forms.Button button_recalc; + private System.Windows.Forms.Button button_copy; + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.Label label_guard; + private System.Windows.Forms.Timer timer_time; + private System.Windows.Forms.Label label_datetime; + } +} + diff --git a/MainForm.cs b/MainForm.cs new file mode 100644 index 0000000..79eadf6 --- /dev/null +++ b/MainForm.cs @@ -0,0 +1,93 @@ +using steam_token.Entity; +using steam_token.UI; +using steam_token.UI.Set; +using steam_token.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Util; + +namespace steam_token +{ + public partial class mainForm : Form + { + public mainForm() + { + InitializeComponent(); + + this.timer_time.Start(); + + // 先计算一次 + this.label_guard.Text = CalcOnce(); + + // 新开一个线程去初始化数据 + SteamGuardCalcThread.StartThread(this.label_guard, this.progressBar_refresh); + } + + /// + /// 打开令牌配置页面 + /// + /// + /// + private void GuardToolStripMenuItem_Click(object sender, EventArgs e) + { + GuardConfig guard = new GuardConfig(); + guard.ShowDialog(this); + } + + /// + /// 打开程序设置页面 + /// + /// + /// + + private void ProgramToolStripMenuItem_Click(object sender, EventArgs e) + { + ProgramConfig program = new ProgramConfig(); + program.ShowDialog(this); + } + + private void button_recalc_Click(object sender, EventArgs e) + { + this.label_guard.Text = CalcOnce(); + + SteamGuardCalcThread.StartThread(this.label_guard, this.progressBar_refresh); + } + + private string CalcOnce() + { + Config config = ConfigUtil.Read(); + string guard = SteamTwoFactorToken.GenerateSteamGuardCode(config.SteamGuard.shared_secret); + Console.WriteLine("guard = " + guard); + return guard; + } + + private void button_copy_Click(object sender, EventArgs e) + { + Clipboard.SetDataObject(this.label_guard.Text); + } + + private void timer_time_Tick(object sender, EventArgs e) + { + this.label_datetime.Text = DateTime.Now.ToString(); + } + + private void mainForm_FormClosed(object sender, FormClosedEventArgs e) + { + Environment.Exit(0); + } + + private void AboutToolStripMenuItem_Click(object sender, EventArgs e) + { + AboutForm about = new AboutForm(); + about.ShowDialog(this); + } + } +} diff --git a/MainForm.resx b/MainForm.resx new file mode 100644 index 0000000..a2dba95 --- /dev/null +++ b/MainForm.resx @@ -0,0 +1,362 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 130, 17 + + + True + + + + + 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 + + + \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..e01e7ae --- /dev/null +++ b/Program.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; +using Util; + +namespace steam_token +{ + static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main() + { + Control.CheckForIllegalCrossThreadCalls = false; + ConfigUtil.Init(new steam_token.Entity.Config()); + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new mainForm()); + } + } +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4ff727f --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("steam-token")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("steam-token")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("26555785-e311-4f28-a28d-dd96b3165b98")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs new file mode 100644 index 0000000..0f94583 --- /dev/null +++ b/Properties/Resources.Designer.cs @@ -0,0 +1,91 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace steam_token.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("steam_token.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// 查找类似 SteamGuard 的本地化字符串。 + /// + internal static string CONFIG_FOLDER { + get { + return ResourceManager.GetString("CONFIG_FOLDER", resourceCulture); + } + } + + /// + /// 查找类似 config.json 的本地化字符串。 + /// + internal static string CONFIG_NAME { + get { + return ResourceManager.GetString("CONFIG_NAME", resourceCulture); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap steam_token { + get { + object obj = ResourceManager.GetObject("steam_token", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Properties/Resources.resx b/Properties/Resources.resx new file mode 100644 index 0000000..0c2ea96 --- /dev/null +++ b/Properties/Resources.resx @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + SteamGuard + + + config.json + 配置文件 + + + + ..\Assets\Image\steam-token.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs new file mode 100644 index 0000000..96f4a25 --- /dev/null +++ b/Properties/Settings.Designer.cs @@ -0,0 +1,29 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +namespace steam_token.Properties +{ + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Properties/Settings.settings b/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/UI/AboutForm.Designer.cs b/UI/AboutForm.Designer.cs new file mode 100644 index 0000000..c945380 --- /dev/null +++ b/UI/AboutForm.Designer.cs @@ -0,0 +1,136 @@ + +namespace steam_token.UI +{ + partial class AboutForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutForm)); + this.label1 = new System.Windows.Forms.Label(); + this.linkLabel_openurl = new System.Windows.Forms.LinkLabel(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.button_about_confirm = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(105, 30); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(286, 21); + this.label1.TabIndex = 0; + this.label1.Text = "Steam令牌计算器 v1.0 @niushuai233"; + // + // linkLabel_openurl + // + this.linkLabel_openurl.AutoSize = true; + this.linkLabel_openurl.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline; + this.linkLabel_openurl.Location = new System.Drawing.Point(105, 115); + this.linkLabel_openurl.Name = "linkLabel_openurl"; + this.linkLabel_openurl.Size = new System.Drawing.Size(390, 21); + this.linkLabel_openurl.TabIndex = 1; + this.linkLabel_openurl.TabStop = true; + this.linkLabel_openurl.Text = "https://github.com/niushuai233/steam-token-win"; + this.linkLabel_openurl.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel_openurl_LinkClicked); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(21, 115); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(78, 21); + this.label2.TabIndex = 2; + this.label2.Text = "开源地址:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(105, 70); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(72, 21); + this.label3.TabIndex = 3; + this.label3.Text = "欢迎Star"; + // + // pictureBox1 + // + this.pictureBox1.InitialImage = global::steam_token.Properties.Resources.steam_token; + this.pictureBox1.Location = new System.Drawing.Point(24, 20); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(75, 75); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBox1.TabIndex = 4; + this.pictureBox1.TabStop = false; + // + // button_about_confirm + // + this.button_about_confirm.Location = new System.Drawing.Point(394, 156); + this.button_about_confirm.Name = "button_about_confirm"; + this.button_about_confirm.Size = new System.Drawing.Size(90, 32); + this.button_about_confirm.TabIndex = 5; + this.button_about_confirm.Text = "关闭"; + this.button_about_confirm.UseVisualStyleBackColor = true; + this.button_about_confirm.Click += new System.EventHandler(this.button_about_confirm_Click); + // + // AboutForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(496, 200); + this.Controls.Add(this.button_about_confirm); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.linkLabel_openurl); + this.Controls.Add(this.label1); + this.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(5); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AboutForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "关于"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.LinkLabel linkLabel_openurl; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Button button_about_confirm; + } +} \ No newline at end of file diff --git a/UI/AboutForm.cs b/UI/AboutForm.cs new file mode 100644 index 0000000..a302b05 --- /dev/null +++ b/UI/AboutForm.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace steam_token.UI +{ + public partial class AboutForm : Form + { + public AboutForm() + { + InitializeComponent(); + // 初始化图片 + this.pictureBox1.Image = Properties.Resources.steam_token; + } + + private void button_about_confirm_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void linkLabel_openurl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + System.Diagnostics.Process.Start(this.linkLabel_openurl.Text); + } + } +} diff --git a/UI/AboutForm.resx b/UI/AboutForm.resx new file mode 100644 index 0000000..ed11fcd --- /dev/null +++ b/UI/AboutForm.resx @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + + + 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 + + + \ No newline at end of file diff --git a/UI/Set/GuardConfig.Designer.cs b/UI/Set/GuardConfig.Designer.cs new file mode 100644 index 0000000..ae94ac0 --- /dev/null +++ b/UI/Set/GuardConfig.Designer.cs @@ -0,0 +1,135 @@ + +namespace steam_token.UI.Set +{ + partial class GuardConfig + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button_confirm = new System.Windows.Forms.Button(); + this.openFileDialog_steam = new System.Windows.Forms.OpenFileDialog(); + this.textBox_shared_secret = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.button_openfile = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // button_confirm + // + this.button_confirm.Location = new System.Drawing.Point(451, 97); + this.button_confirm.Name = "button_confirm"; + this.button_confirm.Size = new System.Drawing.Size(85, 30); + this.button_confirm.TabIndex = 1; + this.button_confirm.Text = "确定"; + this.button_confirm.UseVisualStyleBackColor = true; + this.button_confirm.Click += new System.EventHandler(this.button_confirm_Click); + // + // openFileDialog_steam + // + this.openFileDialog_steam.FileName = "openFileDialog1"; + this.openFileDialog_steam.Title = "请选择Steam令牌文件"; + // + // textBox_shared_secret + // + this.textBox_shared_secret.Location = new System.Drawing.Point(16, 59); + this.textBox_shared_secret.Name = "textBox_shared_secret"; + this.textBox_shared_secret.Size = new System.Drawing.Size(428, 29); + this.textBox_shared_secret.TabIndex = 2; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(363, 21); + this.label1.TabIndex = 3; + this.label1.Text = "请输入位于Steam令牌文件中的[shared_secret]值"; + // + // button_openfile + // + this.button_openfile.Location = new System.Drawing.Point(451, 59); + this.button_openfile.Name = "button_openfile"; + this.button_openfile.Size = new System.Drawing.Size(85, 30); + this.button_openfile.TabIndex = 1; + this.button_openfile.Text = "选择文件"; + this.button_openfile.UseVisualStyleBackColor = true; + this.button_openfile.Click += new System.EventHandler(this.button_openfile_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("微软雅黑", 9F); + this.label2.ForeColor = System.Drawing.Color.Red; + this.label2.Location = new System.Drawing.Point(13, 36); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(462, 17); + this.label2.TabIndex = 4; + this.label2.Text = "/data/data/com.valvesoftware.android.steam.community/files/Steamguard-xxx"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("微软雅黑", 10F); + this.label3.Location = new System.Drawing.Point(16, 101); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(309, 20); + this.label3.TabIndex = 5; + this.label3.Text = "Tips: 手机需root或者能通过备份手段拿到该文件"; + // + // GuardConfig + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(539, 132); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBox_shared_secret); + this.Controls.Add(this.button_openfile); + this.Controls.Add(this.button_confirm); + this.Font = new System.Drawing.Font("微软雅黑", 12F); + this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "GuardConfig"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "令牌配置"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.Button button_confirm; + private System.Windows.Forms.OpenFileDialog openFileDialog_steam; + private System.Windows.Forms.TextBox textBox_shared_secret; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button button_openfile; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + } +} \ No newline at end of file diff --git a/UI/Set/GuardConfig.cs b/UI/Set/GuardConfig.cs new file mode 100644 index 0000000..b4f79af --- /dev/null +++ b/UI/Set/GuardConfig.cs @@ -0,0 +1,95 @@ +using Newtonsoft.Json; +using steam_token.Entity; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Util; + +namespace steam_token.UI.Set +{ + public partial class GuardConfig : Form + { + private SteamGuard steamGuard; + public GuardConfig() + { + InitializeComponent(); + // 先初始化组件 再使用 + Config config = ConfigUtil.Read(); + steamGuard = config.SteamGuard; + if (null != steamGuard && !string.IsNullOrEmpty(steamGuard.shared_secret)) + { + this.textBox_shared_secret.Text = steamGuard.shared_secret; + } + } + + private void button_openfile_Click(object sender, EventArgs e) + { + this.openFileDialog_steam.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); + if (this.openFileDialog_steam.ShowDialog() == DialogResult.OK) + { + ReadFile(this.openFileDialog_steam.FileName); + } + } + + private void ReadFile(string fileName) + { + FileInfo file = new FileInfo(fileName); + if (!file.Exists) + { + MessageBox.Show("文件" + fileName + "不存在"); + } + + if (file.Length > 1024 * 2) + { + MessageBox.Show("文件大小错误, 鉴定为不合适的文件"); + } + + byte[] bytes = File.ReadAllBytes(fileName); + string fileStr = Encoding.UTF8.GetString(bytes); + + ParseSteamGuard(fileStr); + + + } + + private void ParseSteamGuard(string fileStr) + { + try + { + steamGuard = JsonConvert.DeserializeObject(fileStr); + Console.WriteLine(steamGuard); + + this.textBox_shared_secret.Text = steamGuard.shared_secret; + } + catch (JsonReaderException) + { + MessageBox.Show("文件内容不符合要求, 请不要修改拷贝出来的文件"); + } + catch (Exception) + { + MessageBox.Show("未知异常, 请通知作者, 感谢!"); + } + } + + private void button_confirm_Click(object sender, EventArgs e) + { + if (null == steamGuard) + { + MessageBox.Show("熬, 未知操作!!!"); + return; + } + + Config config = ConfigUtil.Read(); + config.SteamGuard = steamGuard; + ConfigUtil.Save(config); + this.Dispose(); + } + } +} diff --git a/UI/Set/GuardConfig.resx b/UI/Set/GuardConfig.resx new file mode 100644 index 0000000..227aca0 --- /dev/null +++ b/UI/Set/GuardConfig.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + True + + \ No newline at end of file diff --git a/UI/Set/ProgramConfig.Designer.cs b/UI/Set/ProgramConfig.Designer.cs new file mode 100644 index 0000000..9d97c17 --- /dev/null +++ b/UI/Set/ProgramConfig.Designer.cs @@ -0,0 +1,52 @@ + +namespace steam_token.UI.Set +{ + partial class ProgramConfig + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // ProgramConfig + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(539, 294); + this.Font = new System.Drawing.Font("微软雅黑", 12F); + this.Margin = new System.Windows.Forms.Padding(5); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ProgramConfig"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "设置"; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/UI/Set/ProgramConfig.cs b/UI/Set/ProgramConfig.cs new file mode 100644 index 0000000..84b46b3 --- /dev/null +++ b/UI/Set/ProgramConfig.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace steam_token.UI.Set +{ + public partial class ProgramConfig : Form + { + public ProgramConfig() + { + InitializeComponent(); + } + } +} diff --git a/UI/Set/ProgramConfig.resx b/UI/Set/ProgramConfig.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/UI/Set/ProgramConfig.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Util/ConfigUtil.cs b/Util/ConfigUtil.cs new file mode 100644 index 0000000..08938c9 --- /dev/null +++ b/Util/ConfigUtil.cs @@ -0,0 +1,63 @@ +using Newtonsoft.Json; +using steam_token.Entity; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Util +{ + public class ConfigUtil + { + public static string CONFIG_NAME = steam_token.Properties.Resources.CONFIG_NAME; + public static string CONFIG_FOLDER = steam_token.Properties.Resources.CONFIG_FOLDER; + + public static void Init(T t) + { + string configPath = GetConfigPath(); + if (File.Exists(configPath)) + { + return; + } + File.WriteAllText(configPath, JsonConvert.SerializeObject(t)); + } + + public static T Read() + { + string json = File.ReadAllText(GetConfigPath()); + + try + { + return JsonConvert.DeserializeObject(json); + } + catch (Exception) + { + MessageBox.Show("配置文件内容异常, 请检查", json); + } + + return default; + } + + public static void Save(T config) + { + if (null == config) + { + return; + } + File.WriteAllText(GetConfigPath(), JsonConvert.SerializeObject(config)); + } + + private static string GetConfigPath() + { + string folder = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "/niushuai233/" + CONFIG_FOLDER; + if (!Directory.Exists(folder)) + { + Directory.CreateDirectory(folder); + } + return folder + "/" + CONFIG_NAME; + } + } +} diff --git a/Util/SteamGuardCalcThread.cs b/Util/SteamGuardCalcThread.cs new file mode 100644 index 0000000..ebdbfd6 --- /dev/null +++ b/Util/SteamGuardCalcThread.cs @@ -0,0 +1,69 @@ +using steam_token.Entity; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Util; + +namespace steam_token.Util +{ + public class SteamGuardCalcThread + { + private static Thread thread; + private static Label label_guard; + private static ProgressBar progressBar_refresh; + internal static void StartThread(Label label, ProgressBar progressBar) + { + label_guard = label; + progressBar_refresh = progressBar; + + StartThread(); + } + + private static void StartThread() + { + if (thread != null && thread.IsAlive) + { + // 先停止原先的线程 + thread.Abort(); + Console.WriteLine("中止线程"); + } + // 等1s 保证停止 + // Thread.Sleep(1000); + + // 初始化线程 + thread = new Thread(Calc); + thread.Name = "SteamGuardCalcThread"; + // 开启线程 + thread.Start(); + } + + private static void Calc() + { + Config config = ConfigUtil.Read(); + string shared_secret = config.SteamGuard.shared_secret; + if (string.IsNullOrEmpty(shared_secret)) + { + Console.WriteLine("未发现配置的秘钥"); + return; + } + + for (int i = 30; i >= 0; i--) + { + Thread.Sleep(1000); + if (i == 0) + { + string guard = SteamTwoFactorToken.GenerateSteamGuardCode(shared_secret); + label_guard.Text = guard; + i = 30; + Console.WriteLine("重新设值: " + guard); + } + + progressBar_refresh.Value = i; + } + } + } +} diff --git a/Util/SteamTwoFactorToken.cs b/Util/SteamTwoFactorToken.cs new file mode 100644 index 0000000..64cff66 --- /dev/null +++ b/Util/SteamTwoFactorToken.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace steam_token.Util +{ + public class SteamTwoFactorToken + { + private static byte[] s_rgchSteamguardCodeChars = { 50, 51, 52, 53, 54, 55, 56, 57, 66, 67, 68, 70, 71, 72, 74, 75, 77, 78, 80, 81, 82, 84, 86, 87, 88, 89 }; + private byte[] mSecret; + + public SteamTwoFactorToken(String sharedSecret) + { + if (!string.IsNullOrEmpty(sharedSecret)) + { + this.mSecret = Convert.FromBase64String(sharedSecret); + } + else + { + MessageBox.Show("未知的shared_secret"); + } + } + + public static string GenerateSteamGuardCode(String sharedSecret) + { + return new SteamTwoFactorToken(sharedSecret).GenerateSteamGuardCode(); + } + + public string GenerateSteamGuardCode() + { + return GenerateSteamGuardCodeForTime(CurrentTime()); + } + + private string GenerateSteamGuardCodeForTime(long calcTime) + { + if (this.mSecret == null) + { + return ""; + } + byte[] bArr = new byte[8]; + long j2 = calcTime / 30; + + int i = 8; + while (true) + { + int i2 = i - 1; + if (i <= 0) + { + break; + } + bArr[i2] = (byte)((int)j2); + j2 = RightMove(j2, 8); + i = i2; + } + + HMACSHA1 hmacsha1 = new HMACSHA1(); + hmacsha1.Key = (this.mSecret); + + byte[] doFinal = hmacsha1.ComputeHash(bArr); + int i3 = doFinal[19] & 15; + int i4 = (doFinal[i3 + 3] & 255) | ((doFinal[i3 + 2] & 255) << 8) | ((doFinal[i3] & 127) << 24) | ((doFinal[i3 + 1] & 255) << 16); + byte[] bArr2 = new byte[5]; + for (int i5 = 0; i5 < 5; i5++) + { + byte[] bArr3 = s_rgchSteamguardCodeChars; + bArr2[i5] = bArr3[i4 % bArr3.Length]; + i4 /= bArr3.Length; + } + + return System.Text.Encoding.UTF8.GetString(bArr2); + } + + public long CurrentTime() + { + return DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() / 1000; + } + + + /// + /// 无符号右移, 相当于java里的 value>>>pos + /// + /// + /// + /// + public long RightMove(long value, int pos) + { + //移动 0 位时直接返回原值 + if (pos != 0) + { + // int.MaxValue = 0x7FFFFFFF 整数最大值 + int mask = int.MaxValue; + //无符号整数最高位不表示正负但操作数还是有符号的,有符号数右移1位,正数时高位补0,负数时高位补1 + value = value >> 1; + //和整数最大值进行逻辑与运算,运算后的结果为忽略表示正负值的最高位 + value = value & mask; + //逻辑运算后的值无符号,对无符号的值直接做右移运算,计算剩下的位 + value = value >> pos - 1; + } + + return value; + } + } +} diff --git a/XXXSteamTwoFactorToken.cs b/XXXSteamTwoFactorToken.cs new file mode 100644 index 0000000..d7d5892 --- /dev/null +++ b/XXXSteamTwoFactorToken.cs @@ -0,0 +1,47 @@ +using steam_token.Entity; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Util; + +namespace steam_token +{ + public class XXXSteamTwoFactorToken + { + private static byte[] s_rgchSteamguardCodeChars = { 50, 51, 52, 53, 54, 55, 56, 57, 66, 67, 68, 70, 71, 72, 74, 75, 77, 78, 80, 81, 82, 84, 86, 87, 88, 89 }; + private byte[] mSecret; + + public XXXSteamTwoFactorToken(String sharedSecret) + { + if (string.IsNullOrEmpty(sharedSecret)) + { + this.mSecret = Convert.FromBase64String(sharedSecret); + } + else + { + MessageBox.Show("未知参数 shared_secret"); + } + } + + public static String GenerateSteamGuardCode() + { + string sharedSecret = ConfigUtil.Read().SteamGuard.shared_secret; + + return new XXXSteamTwoFactorToken(sharedSecret).GenerateSteamGuardCodeForTime(CurrentTime()); + } + + private String GenerateSteamGuardCodeForTime(long calcTime) + { + + return null; + } + + private static long CurrentTime() + { + return DateTime.Now.Millisecond / 1000; + } + } +} diff --git a/packages.config b/packages.config new file mode 100644 index 0000000..c8fdfd1 --- /dev/null +++ b/packages.config @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/steam-token.csproj b/steam-token.csproj new file mode 100644 index 0000000..dbfef78 --- /dev/null +++ b/steam-token.csproj @@ -0,0 +1,276 @@ + + + + + + Debug + AnyCPU + {26555785-E311-4F28-A28D-DD96B3165B98} + WinExe + steam_token + steam-token + v4.8 + 512 + true + true + + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + steam-token.ico + + + + packages\Costura.Fody.5.7.0\lib\netstandard1.0\Costura.dll + + + packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll + True + True + + + packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll + + + + packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll + True + True + + + + packages\System.Console.4.3.0\lib\net46\System.Console.dll + True + True + + + + packages\System.Diagnostics.DiagnosticSource.4.3.0\lib\net46\System.Diagnostics.DiagnosticSource.dll + + + packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll + True + True + + + packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll + True + True + + + packages\System.IO.4.3.0\lib\net462\System.IO.dll + True + True + + + packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll + True + True + + + + packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll + True + True + + + packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll + True + True + + + packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll + True + True + + + packages\System.Linq.4.3.0\lib\net463\System.Linq.dll + True + True + + + packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll + True + True + + + packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll + True + True + + + packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll + True + True + + + + packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll + True + True + + + packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll + True + True + + + packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll + True + True + + + packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll + True + True + + + packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll + True + True + + + packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll + True + True + + + packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll + True + True + + + packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll + True + True + + + packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll + True + True + + + packages\System.Text.RegularExpressions.4.3.0\lib\net463\System.Text.RegularExpressions.dll + True + True + + + + + + + + + + + + packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll + True + True + + + + + + + Form + + + MainForm.cs + + + + + Form + + + AboutForm.cs + + + Form + + + ProgramConfig.cs + + + Form + + + GuardConfig.cs + + + + + + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + AboutForm.cs + + + GuardConfig.cs + + + ProgramConfig.cs + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + + + \ No newline at end of file diff --git a/steam-token.ico b/steam-token.ico new file mode 100644 index 0000000000000000000000000000000000000000..a5bd0d563c53dd036e32c299971fdb89cd388e2f GIT binary patch literal 13665 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 literal 0 HcmV?d00001 diff --git a/steam-token.sln b/steam-token.sln new file mode 100644 index 0000000..5448f29 --- /dev/null +++ b/steam-token.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32106.194 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "steam-token", "steam-token.csproj", "{26555785-E311-4F28-A28D-DD96B3165B98}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {26555785-E311-4F28-A28D-DD96B3165B98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {26555785-E311-4F28-A28D-DD96B3165B98}.Debug|Any CPU.Build.0 = Debug|Any CPU + {26555785-E311-4F28-A28D-DD96B3165B98}.Release|Any CPU.ActiveCfg = Release|Any CPU + {26555785-E311-4F28-A28D-DD96B3165B98}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {820E8374-01AD-41B9-82C1-388ADF797885} + EndGlobalSection +EndGlobal