From b19f4213ff3c057040d35baf8c5db31fb893bda5 Mon Sep 17 00:00:00 2001 From: yosiokat Date: Mon, 11 Aug 2008 08:31:23 +0000 Subject: [PATCH] =?UTF-8?q?HashCheckTemplate=E3=81=AE=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=80=82=20=E3=80=80=E3=83=BBROM=E3=83=98=E3=83=83=E3=83=80?= =?UTF-8?q?=E3=82=92=E6=AD=A3=E5=BC=8F=E7=89=88"0DTA"=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E3=80=82=20=E3=80=80=E3=83=BBmakerom.TWL.DEBUG.exe?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=A6=E3=80=81ARM9.FLX.?= =?UTF-8?q?static=E3=81=AE=E5=AE=8C=E5=85=A8=E3=81=AA=E3=83=8F=E3=83=83?= =?UTF-8?q?=E3=82=B7=E3=83=A5=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=82=92?= =?UTF-8?q?=E8=A1=8C=E3=81=88=E3=82=8B=E3=82=88=E3=81=86=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=80=82=20=E3=80=80=E3=83=BB=E3=81=BE=E3=81=9F=E3=80=81?= =?UTF-8?q?=E5=90=84static=E9=A0=98=E5=9F=9F=E3=81=AE=E3=82=B5=E3=82=A4?= =?UTF-8?q?=E3=82=BA=E3=82=92=E3=83=AD=E3=83=BC=E3=83=89=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E3=81=AAMAX=E3=81=AB=E6=8B=A1=E5=BC=B5=E3=80=82=20=E3=80=80?= =?UTF-8?q?=E3=83=BBARM9.FLX,=20ARM7.FLX=E3=81=AE=5Fstart=5FAutoloadDoneCa?= =?UTF-8?q?llback=E3=82=92=E3=82=B1=E3=82=A2=E3=81=97=E3=81=A6=E3=80=81?= =?UTF-8?q?=E3=83=87=E3=83=90=E3=83=83=E3=82=AC=E4=B8=8A=E3=81=A7=E3=82=82?= =?UTF-8?q?=E3=83=8F=E3=83=83=E3=82=B7=E3=83=A5=E5=80=A4=E3=81=8C=E5=90=88?= =?UTF-8?q?=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2136 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- RomHeader/0DTA/libsyscall.a | Bin 0 -> 3132 bytes RomHeader/0DTA/libsyscall_c.bin | Bin 0 -> 2048 bytes RomHeader/0DTA/rom_header_0dta.template.sbin | Bin 0 -> 16384 bytes build/tests/HashCheckTemplate/ARM9/Makefile | 16 +++++- build/tests/HashCheckTemplate/ARM9/main.rsf | 2 +- .../ARM9/src/HashCheckTemplate.c | 5 +- .../crt/ARM7/src/crt0_hct.LTD.c | 31 +++++----- build/tests/HashCheckTemplate/memo.txt | 54 ++++++++++++++---- 8 files changed, 75 insertions(+), 33 deletions(-) create mode 100644 RomHeader/0DTA/libsyscall.a create mode 100644 RomHeader/0DTA/libsyscall_c.bin create mode 100644 RomHeader/0DTA/rom_header_0dta.template.sbin diff --git a/RomHeader/0DTA/libsyscall.a b/RomHeader/0DTA/libsyscall.a new file mode 100644 index 0000000000000000000000000000000000000000..11de5155bd468292f16bd0161f2ef01ff02c8c05 GIT binary patch literal 3132 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 literal 0 HcmV?d00001 diff --git a/RomHeader/0DTA/rom_header_0dta.template.sbin b/RomHeader/0DTA/rom_header_0dta.template.sbin new file mode 100644 index 0000000000000000000000000000000000000000..245475a6c0c29ff81a19daab664cc4435ab35d0c GIT binary patch literal 16384 zcmeI&Ly#swwauOywr$(CZQFL2jkyys5fih%i#rj2zpKn#oXqn? zE^?7TK>s%k!pZ{wdj|V|m;U=BJvE?LD9ry;2M_$eU-18}K=M8l?XjUfFvp@`AW`sr8auT9B??(8~nJNG$RGwpQIYmhw4!JnHwbI zSU8cPua;U!{t24qLX11A4+>VJ+RG6H#9xZ=^`rO=YMab(m-^8ctheGvT5i|_3M|WU z@K(U`)5!-a>;@D!8HUW2WZdUv7<$W7yFz*t$pKU4K)Cb@sXF`rp7r1CpTIwXe**sm z{t5gO_$TmB;Ge)hfqw%31pW#9PYH^bVQnAXFc~XA~5F`?Z zpi4JYDGN_2y22Cpae0{an{#9e%g#&eOro@)J?mgFHu?3iE|N64+R4gCFyUxGE0hsM zV|QKJ-A*I8A<+t^P?M`0MSTv#dat0Eip0nREKObLB%ZfwPf@%vseBoQ_0vDt(#Iae z=EbttircqAE#rdmQwl>nOCNXA*~>7E)+E(0V?o3owT?Bqjj(? zr^)H*3^2nV&Ys5O?iYz{t$ooV;M%>%*LzeTE>rc2UmHXk#cJt(6`fnf7I3INdfh7D z=EA3j;fd>jKM?u2>=_&I6BO)FO{GUU_}pJ|l34}x%aCdDjPPKoD=iW>3?7Cou@TKW z4CWIytzzM`{@xIUvyulhi44WEq5r%o;I>t@rpxO(L$Wv7N;8I-_TYRL<)us{EaPRD zxcC#6_%y)62YI_N*2O^wx1EeLLL(CwT0OQ0h^8tUmQKI3-m3X5pn%INov+vMBa7oB zQ?{J+fkZb8aFtbfEAQK~ak zgAI_dNe+Quj6j}h_ioVQUf+(F>Q}BO^`E3ymc;F(mZo~HYhc$04KtzwHMQAG7#uUP zUGbG_9k55GSAufDA1h<-YSS|tdM%0b&d6NTOxssLp?IR`EQ+komypyTM_Tzn)*e0& zlr0eSMyNYS8pyiY``JkhL*wDTvw~2atl{tD>*tI)U%6bkNY#E32-!1wKXTC46EmnP z9X4{kYDLbV4vuY~JdE#9q)dEbC-|W-pGH%U+#eAC`X2Z^9Tvc`Cjyqn>EWYrn>-}2 zOV;G7=ly)w7%QLMu8P$W{smrt(I~mi83bWUb4a%Y3XHeX>7H!BciWtW1}w3=(~}_^ z)0ztvMrb9-9eDznE3HLM>i?`xQ3}0M4*R+w8t&6e$?(eDTf!y0E)dr@67|YHe%qXT zrT`i8Cz!Bv)a>qhK?OlLbyOx-lMV_3hORyaSvsnVp#OQtI5gD1WCn_$WUZKIK>@FW zVXO7Fm%7m~#U^Zmd@Q#|kvvxILq*ta1Zun^z`S)o^yM;!*{cT{0gu>Dp9(2FOwAFl z>Q)=c8!nCc%wm*D^*?X#kDMPda5xUhjDLUp5*gO1nu>9PG1YA937v8PgknWO(^m9< zrbkg+eBH4h5`x;!Ga5)cNY$yrnXLN{89u2>AI9cr-_7nMhtR|-2|wsQpQY8>kt(2R zc-*~)8i0)e0}7brQ|&ClRqKU(%}JtEb?XX#3y_qu?mWD2xKMI$1)q0Sqv;au@dmC` zf)?B=@lq>KMBPFKamP@QA%@cc=bxhg;hQfubvt1C;VlF@I>s zFX&(A%f-*HDM7YO5D^gD!yE115&jmrm{TD~QCl_qoK;nkc%3cllU>Kom=o#^xkY#T_ zZ4jhu)4BIgj04%XYk#+_pYJOpIN=7ZMv(t*FYbVqf3f5RJVR{bN7gV=0psnvJG$I!P)mTkf%U9o9k=zA5JBUZqm^)MDX)ElNa~MGA5w~_rMDPgOe5h&D z>1#HrWP4b-slrt8J6i-}I!C)Fb6<<~CC18?*|`$Q>kNO&bxEONZ+42H^I>i$sCZ2F3r08R zk4Ny?jtnck+_Z2tbk6QMtI+D4=bQa)_xoHN@pSSrf*0%Fr3cJV1OV8x`t=IlQ1PLr zYbx&V;h6*{0XrEQxuk(qczm6EJt;i(k?JS4sLhdZ5=eArFC+`FI}8usIKb;SnL8a` zsC|sBuqfy(m^hz(gL0qtw69YOU~(qb5r*bxELa)XlczTtyF@B|R(hGf=k$rqw5PJ7 zW=N@D0nhF96Mk%-IG;E?bT!92wX-D%k)Sq)^d(_caP`&Ot^k)t?-Bb$Zo_tPFHK{X zWLGC5Qp2bRZ=-O90o$^d+_J5W7WGNwYPmA>KwyLkeX1IW7&`hKp&(PGGK0jWG89sG9YwWE>9`S}0o>^E5=4h5{tzc z?*MSwRO7(Z0=7&!$J3`|449^j*pd6W&vITzy->ZcKDib(#Nr3Hc4bV@{{QNUH-2f$22CC#fYEv&4meP#S zhVPx`KN)4KHGf=uXMnBa$`49(XYmYr9teR0BaaB)T;n;XF=c#8Bz35m!;gGHc5aF6 ziC&kJz-L41eVzS~3eSVeoi{c{B4_}Jnb5696_4(3@D7ii3?Lqj@<-cCX~<)&uQDJ^ zIQAF8w`v^Kq1CVeu?6j`Q3MQB{6zE&O=%lUc3up6Py3a?plX`fYil$SA9 z184ABSf>M4X8BhUK$e+Gh0$`CY>Mga%IWfo6h;0w@=?e)pjmu5N=)K-X1|>%mc?^d zH)Uk^OJ$awPe|nKT7`Ukfw+_Y=6oPP_aJi8_pK{nFp4LyEM=@Yb{tS+sneyEp$H5p zF_%eEcu_;3AF$Fc0MmKg+eCCN3J$I{(TnfEp^20kVgqJa@yk8^FoA@iEp zIMggMwhix`L&<$M=^A=B|fOHTv%Qo{B^=wnMjY9IMuI~q#z>hPpOvANF6!lUF4*T$ z3WFu-1vRwl2n!16{EalHLL^kbw%EV{rPzg`^eFt8U1@o^Q zx`dAOg(MbVIgJtbIv9jz8~~yNHJQ$In2l~CLDf) ztQyX#q%C^Dtns14RT<8MMJjnSXtcT&;Ts{Iw2RuMIMY7Dke z?aKuo{lJ+UAE)O}C_&nYl=ZPDt3kajHEW-OW$(ckNH?N~9hoI`6Oz04hJA)JpD}h* z59*6CjBW7g-S}tf?2a`VH=@L;6^k9$mLr7=8_0}=SWcE`gE z|55^<-*(Z+k4TXxQqpm}5H#t?dd-_% zdDkyZ|7w<1SaLXR3>?kU6p9A6X~)fuzzicoiyrS#NaIWa4)_SGRgS+(>6XoWfG1jn zQXF_6sGTVJZ&AT!!Vmzh1zII54_ijh1Z}&kBMH5i@H3qn0U)6GBthyWn23l#zA#rz zhT31|Y4?qBV*K4|jOsO@Zx2x!yaD1`{(dN`a{d>NemO4Mj*zuajwmR>+4y#ply&)k zf$|tMJ(Y$QW6?? zjDqF=elieKWMmKuuS2HZ_2ZzA#52!G-%BpM|Dsz)y|wOXK0en}ihUlX5xq@L;^Ju{~!0K{f3x?R%!-T}kA zs&N<+sEpxfpH{JA-<=$``BPWp%^962#7Vi;m)L-X1U`#NDX1o>kxT=J{$rw(g`^ke zrqCr%hABg}A_h!&RgVWuM+)-k^i4{=^J820wn?sdx6aHx!c8?6UUa$*Ns0o|SF9|W zS`DF+c&>T9azSselP>I}$2>eD+Y`$>t{DVkQ))fsDgqfVP_b`^Bn|cvZmam_{+F^e z+yIC=5+ii;I|ak75g&8oN!D5O=~6d|zrwE@zCW_wp?<>EGE0~S%ub{=S% z+nZIu%PJfT^VfHNvPwqY-bdtP$e;SHmd+?;go;f*L5w=z)tY^+ELWv(ts2jSmmin% zYuUOThBrMuD#58h2L{R-MSs30Qw}DSQ{ROfygk3cvl#v;x-zcZgp`%H$?|rU@4j_% zur_GPd4StO99pyC8?6>q&CK#BJFRXHgL|U3S3%w`0g?@@-HG!GXCxPRdp8*)j=Lr) zbuPXw(pTmHM|jH3^PNO=Vz3v;acvtzjKZu_!vxv+xLtuZ>51nhoal)j#;%p3S6FVV z93hTv^0?TQ^*-_*T4qFQC)%nN$2V+mz>sZAlE`Klo3T3qpKC}?Y4%Bams~#PKx!zq zq)Aw(E_XOC32{UJCk1q@Dv~+>v}!FnF+LWpLM7UBq!RKD3AY+(gvt%C%=RK>`YBoA zx#sb*w$tHN)jmRGyOV&^<=9#I*0MMTs?LN7+TWBXYPlvVyg+f8?wTi^bQrZgdo;#COKigo9Sp8a0GWBnIf4!hTaC8t-i5Y{rveis+X#6J_?wH()yz};9E z=KH>Rk{b2$Tu|SmOMBX269Z)76mh#s7!n4=eSET^u9zOg!;Ad2pY3H@=X4bo?V|7% z)M`)!D-4LyS(J3!iCoflHzAD#WIbWOC0Z5-2T`oe$4B2(~-D!v;@mgimNS zPWhe@>IZHih!-gQgW0QcL0Z_G!LHtqizs2#nw&HQI0&N;g-viagO%#bM$l7dys03u zrSV@8mazvd1>S0;{qdyS8j$34zR|$ON@zLA#_8({jSWLiSIjjc3j!&Is+My6nRU>e z;^u=$R48$jkFuHXBV$zYm;;n=V(2)YoH;CN$%0d5u48;(R^_y3SYgof$^>WDxTdL7 z+Ix5Ff1R7?we;!n_Aa3v(SWXwH7G#bW%#%$D~+T+LCh_@KAf%~f2hTFyeCw1!mTP% zl%F6RnxsgT*KcVPw$@1`ZQ(n5un_n^Szjmm=y3tsSy?QCWRYv;^a(Z+D_3@n1ji+z z^H|&b0orC_LV-7`%Vk?jehocDc=3LvE}^QVgV4wzvTH^?`!12>8I=N{AqDa?f7iUm z4BWspk+HtQEP33Oe&%~ynMU7UP}M_p)jf`-8YJhyQnwr8clz3lC$lOu{HImDs<%i@ z|K>C8Etw@K#w2bs4(!Kw7a~M}WDk|R3_1%%q;i^D6T4P!-SJ5WR8y)wLw17*Ti^bM zY%0t#ST2;nO{zP)Fk>@gBubmL)gSIu?m&d|J`*$`j3Ufu%A%UlHf0cFv?f8J?3&X0 zi$)|6^XT@>;TN}F%n4a1w3VzJvu~udqA90_-&ir7^norwEqDOe#lpdz(yiccUrtW9*nLxdRpEi9=2ec!59SSL~(gI1|9a^p>D$<8deO!MSp zL}l^TD9w~%`=7*%T~m~Bk+;-u&AFxoR6EilhBzwHiuN)-jr%hO4^9;qAWQ^5Sb zRoW?4u6uEV%375r)0_>i_5%itZ6zK5hu9zaWl?ZjKYEzB%XqXp}2duQ-p4HN#ZcGmbS zBl%}Px;GzG;&fqo{|77eJ9^J;Q{!bXvUSnxTCrhRJGPx)wN>ngA(q|-7S5So0&Z3- ztwWjjHnTbS8D+3)=oY(I*jmq!SGo(NLih2UCw5R)ta-x&9{3@#wdS#o+|}p{@BZZ1 zx6He>*c!h*{xDI~j}!&l`)2EkxLwh!=Xa?ouDRBT9VlOE8+r z(53V&2`Qvwe<+VXkYf&Q1H{~rcXk1!e1Pm(YDsW`)JB3dfa5eKbC-K{ zzCg_=ornxo_PWt+z0G3~Ee@MHs*7DFujW#2hLgJECh2m%&^5A@Wp&c<`J3Ly&$Kj! z#sG)P&qus@bgL424%iKh`QyaTwCr^IF-hM3){sUdQcp)W?=CAE<8Co}x+lq54$dWi z9&&-$o?b27238qN6kAM;9x(D+}y9!hH}5m^XzyIoTG1dc*AtwMgctjPh*hH?6_L z=!>is8lm9eUMYM4Xpjx&2A*b4h}*&0avN9bEB+le1o*NnC<$;A{w9@C&}(Ex>dxN? z|2qb9lijsDamN%k6nPS>$ohtLQ18dz`KV9afdU}~<;pqalW8$PxK~~EMabXvdALO8 zqf-F~<*|kGA`cd{*9{dRBOxYb=jUGED#l$dElhOb6v2clgn3xQR9j83M9xo!@UsJ0 zVpnaLD+^%nV6aNG=aL&5WxZXBv37Ou7<|Rwf8xfvB>h)LG$mLigjyGn47OxF?iuc6 zNXi+~bIvgsM4^_vd(ob`-_xK+(S%xb=e`81bB)vf{-gKOj=Mw#HUWk zURjQZ!dKjRW#;-Zd*70X^GQqYH9F|+f`L>w#X?0S`SHv;K`0`Pn~3_QF^m9zdi{c7 z=*xXIN%p<&=SX(Jv@%$lFD*)D2sAY#kfgbRVMbHH*&**9zbU@g(Bu$VBjtsoN~~V} zONef~W16$>EPs6-W_Fxew9Qq?wB0sk)R_%lBKQxA$v>@nAIl5WlFuWx-y0Y|Tbc(=u zuj5P++9XCXn0XqIfY9hv{0z*uw%P2uf~8rU zyuV17Z#v^hgv~HT>nrJmzbhel6?hGs+-up$>o{q{?(m*|EJ_%}&w*4tOX`O|pE*5p zf_n)NgWRWfywc~?OC!?n0ZANx_f1234%o^V$JYn>3fL`Nm}txKYDlYeum^Fark~~c z9^Gehl^e63dslX+y@0;j^dqCXzT~3RX^W6R5Iz)lyUqubh{l-AO4D}(Aoy&PDSx@2 z2$W@gRJPmfgll)DuKdvTXaT z*>|**Q{~+5hqnd=m5JNWet~VLWMdUo9SdwOFwS*Zs0bbxK*$`OIaMn~vBquOjGagC zA=Idc{bjntn^&Vu6008S7lsg<#P+05JX5?rdE|T%+;cuDzTX{hh1*rssRT&C1-gPn z7B!Lm^vTFD31uYG!3Y`J5M~xFtJ^WlJKi`SP39xORx`L0!Eaf zgtoZ$f}2cdpHyyh5&;!RYXfySu*redrPcZuDYB)$-bUr_aq?P*+YMN=Y(}TP`!Bca z%G)d~g6t0>CC1~AoXoSx|3mqsinU~$IZUTiGvQGyd zJ~yZCZ@Cxm@#zAr8lGF6ExzdcGY3l!a0s)o@CCvkRr2 zCn8}&W!6P?YtNi)#eCP<-Ipa*Nn9B@2ut&7G#S!ViSo4*-)^-PqqFde`P(+!DqRBM zI_|QfD8~pAYZP6Lz~b#{?=)@FM74t13kuCSd2( z>*z&x3JYX{*Q*30deT zgd&?Z>AP9qx4Y5}WN#u5E0!qkB@n|sa-3iK&|Ldt8R7t`bT*{SB<*J@U?qd(M zDG1}aB%9}!JYfazCIRe!3>Z#VyeoSkm5sP;O(DIW^GCLPPSsAQMq@lAC1VODzC&MQ zB{opFDXy1)`L9c?=;a>xc-g)=*dUGXrkz@!sfyXTT8^OZIL{|k0di>ifoy{^u4!9W zw8bR4ij`FkJ6rh9irv_Q7xU-mW7Vbyd{=zmu^>V6Z(VD_(^Ze)J3^9Tz309uuLCvW z#t^bvE;JlvRmgP^fdiX(n*ba9{STnQ^4u^7uT!8s?09$2Z>@S~ef^|jYOpRk6GAi2 zhlbz>=m)4mr9uS?8U_{)9sv;v83h#$9pe`!)^BVaTs(XNLLy=kQZjN1N-Am^S~_|L zMkZz!RyKAHPA+a9UOoW7fS{1Dh^Uyjgrt@beFH-y zV-r&|a|=r=Ya3fTdk04+XBSsDcMnf5Zy#Sj|A4@t;E>R;@QBE$=$P2J_=LoyYCcR`i91)=9bpB_Kwc3?w;Ph{(-@v;gQj?@rlW) z>6zKN`Gv)$<(1X7^^MJ~?Va7d{e#1!zlu~clQsEPtPx}Z|@(UU*A7K zz#yPt;1H1isr~(uzrDUZKRrI&-`)PbxxTu*I6pf*IX*f(*x%dT+1}dRSYKOR zSzcOPn4g=SnVy=Q7#|xQ86FxO=F(<6Xm4w6X>Mw4sIRN7sjjN5C@(85DK083 z$j{5o$mNlr>kh>weniH?el2oDPl2@VPj@b~le@%HlcaCdWcadvWau(z|d zv9_|bFgG(bF*Y(Z(AU$|(bm$`P*?k-s-moDIqQmain_autoload_done; + *(u32 *)pROMH->main_autoload_done = 0xE12FFF1E; SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x028)), *((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x02c))); + SVC_HMACSHA1Update(pCon, pROMH->main_ram_address, pROMH->main_size); SVC_HMACSHA1GetHash(pCon, (void *)DGT_TGT_ADDR); + *(u32 *)pROMH->main_autoload_done = bak; // arm7_flx + bak = *(u32 *)pROMH->sub_autoload_done; + *(u32 *)pROMH->sub_autoload_done = 0xE12FFF1E; SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x038)), *((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x03c))); + SVC_HMACSHA1Update(pCon, pROMH->sub_ram_address, pROMH->sub_size); SVC_HMACSHA1GetHash(pCon, (void *)(DGT_TGT_ADDR + 32)); + *(u32 *)pROMH->sub_autoload_done = bak; // arm9_ltd SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1c8)), *((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1cc))); + SVC_HMACSHA1Update(pCon, pROMH->main_ltd_ram_address, pROMH->main_ltd_size); SVC_HMACSHA1GetHash(pCon, (void *)(DGT_TGT_ADDR + 2 * 32)); // arm7_ltd SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1d8)), *((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1dc))); + SVC_HMACSHA1Update(pCon, pROMH->sub_ltd_ram_address, pROMH->sub_ltd_size); SVC_HMACSHA1GetHash(pCon, (void *)(DGT_TGT_ADDR + 3 * 32)); } diff --git a/build/tests/HashCheckTemplate/memo.txt b/build/tests/HashCheckTemplate/memo.txt index e8091d57..cf41343d 100644 --- a/build/tests/HashCheckTemplate/memo.txt +++ b/build/tests/HashCheckTemplate/memo.txt @@ -1,15 +1,49 @@ -【デバッガでうまく動かない】 -どうやらデバッガはコードにいろいろ埋めるらしいので、起動時には既にロード済みROMの内容が違うっぽい→SHA1計算アウト。 -単体ブートならOK。 +【ISデバッガがコードを変更する箇所】 +・ARM9.flx.static, ARM7.flx.static + _start_AutoloadDoneCallbackの先頭コードをISデバッガのモニタプログラムへの分岐に書き換えるので、 + ハッシュを正しく計算する場合は、そのアドレスのコードを元々の値である0xE12FFF1E(= BX LR)にアプリで書き換えてやる + 必要がある。 +・ブレークポイント設定箇所 + ブレークポイント設定箇所は、デバッガによって未定義命令が埋め込まれるので、ハッシュを正しく計算する場合は、全ての + ブレークポイントを無効にする必要がある。 -【暗号化領域】 -ARM9FLXの先頭0x800バイト(2kバイト)は暗号化されている(暗号化領域)。で、ランチャーがブート直前に暗号化を解除する。 +なお、これらは、単体ブートなら何もケアしなくてOK. + + + +【blowfish暗号化システムコール】 +ARM9FLXの先頭0x800バイト(2kバイト)はシステムコールが配置され、Blowfish暗号化されている(暗号化領域)。 +で、ランチャーがブート直前に暗号化を解除する。 ヘッダに埋め込まれているARM9FLXのハッシュは、暗号化された状態でのハッシュである。 HashCheckTemplateでARM9FLXのハッシュを計算する時点では、すでに暗号化が解除されているため、計算が合わない。 どうにかして解除前の暗号化領域を手に入れる必要がある。 -が、実はHashCheckTemplateでは、この領域を00で埋めれば計算が合う。 -HashCheckTemplateのようなテストプログラムでは、暗号化領域は00で埋められるためである。 -【暗号化領域が00であった事の確認】 -暗号解除時、先頭0x800バイトのうち先頭2バイトの暗号解除結果が"encryObj"でない場合は全体の暗号解除をせず、特殊処理として未定義命令コード(0xe7ffdeff)で埋められる。 -よって、暗号化領域に当たる部分が実行時に未定義命令コードで埋まってるのを確認すれば良い。 + +・ROMヘッダが"NTRJ"の場合 + アプリケーション上で上記暗号領域を00で埋めれば計算が合う。 + HashCheckTemplateのようなテストプログラムでは、暗号化領域は00で埋められるためである。 + <暗号化領域が00であった事の確認> + 1)暗号解除時、先頭0x800バイトのうち先頭2バイトの暗号解除結果が"encryObj"でない場合は全体の暗号解除をせず、特殊処理 +  として未定義命令コード(0xe7ffdeff)で埋められる。 +  よって、暗号化領域に当たる部分が実行時に未定義命令コードで埋まってるのを確認すれば良い。 + + 2)makerom特別版のmakerom.TWL.DEBUG.exe/makerom.TWL.sys.DEBUG.exe/makerom.TWL.secure.DEBUG.exeを使用する。(SDKに添付) +  このmakeromを使用して、MAKEROM_FLAGSで、-DSYSCALL_Cの指定をしなかった場合、ROMヘッダのnitro_whitelist_phase2_diegstに +  上記暗号領域を除いた状態のARM9.FLX.staticのハッシュ値が格納される。 + +・ROMヘッダが"NTRJ"以外の正式ROMヘッダを使用している場合 + makerom特別版のmakerom.TWL.DEBUG.exe/makerom.TWL.sys.DEBUG.exe/makerom.TWL.secure.DEBUG.exeを使用する。(SDKに添付) + このmakeromを使用して、MAKEROM_FLAGS += -DSYSCALL_C='hoge/libsyscall_c.bin'の形式で、正式版ROMヘッダに添付している + クローンブート用のデコード済みシステムコールバイナリを指定することで、ROMヘッダのnitro_whitelist_phase2_diegstに + 上記暗号領域をデコードした状態のARM9.FLX.staticのハッシュ値が格納される。 + + + +【staticサイズ拡張】 + makerom特別版のmakerom.TWL.DEBUG.exe/makerom.TWL.sys.DEBUG.exe/makerom.TWL.secure.DEBUG.exeを使用する。(SDKに添付) + MAKEROM_FLAGSに下記定義を追加することで、対象セグメントを指定サイズ分ランダム値で拡張できる。 + ARM9.FLX.static : -DARM9FLX_EXPAND=拡張サイズ (ランチャーで正常ブート可能 max サイズ = 0x27c000) + ARM7.FLX.static : -DARM7FLX_EXPAND=拡張サイズ (  〃           max サイズ = 0x40000) + ARM9.LTD.static : -DARM9LTD_EXPAND=拡張サイズ (  〃           max サイズ = 0x280000) + ARM7.LTD.static : -DARM7LTD_EXPAND=拡張サイズ (  〃           max サイズ = 0x108000) +