Skip to content

Commit

Permalink
improve lock region
Browse files Browse the repository at this point in the history
  • Loading branch information
dnasdw committed Mar 27, 2019
1 parent 32f332a commit 387de14
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 3 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ if(APPLE)
endif()
set(_3DSTOOL_MAJOR 1)
set(_3DSTOOL_MINOR 2)
set(_3DSTOOL_PATCHLEVEL 3)
set(_3DSTOOL_PATCHLEVEL 4)
if(NOT MSVC_IDE AND NOT XCODE_VERSION AND NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE)
endif()
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ An all-in-one tool for extracting/creating 3ds roms.
- v1.2.1 @ 2018.07.26 - Support openssl 1.1.0
- v1.2.2 @ 2018.08.27 - Fix not encrypt bug
- v1.2.3 @ 2018.09.03 - Fix extract cxi without exefs bug
- v1.2.4 @ 2019.03.28 - Improve lock region

### v1.1

Expand Down
63 changes: 63 additions & 0 deletions bin/ext_key.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1159,6 +1159,7 @@
00040000001B8100 6698A2E2932FF0A80BEAAFAF285A254C
00040000001B8200 31EAB11FBB308282ACF522A8120621EF
00040000001B8300 06820591168AE59CFB76699EDB124B2C
00040000001B8400 3859A1F75EAE219F47D61F0223CFC60A
00040000001B8600 2C2AC69D04BB08888FE830F14424B852
00040000001B8700 26A22CD09E64BD4719D7E9FC5A46BD99
00040000001B8800 283544D3AFCAC3980D3623EC3891CBAF
Expand Down Expand Up @@ -1325,6 +1326,7 @@
00040000001C6900 B8B95C723E8E97543F8806C4FB861EFC
00040000001C6B00 0D3F984D2462E853ECCCCAFAFC285F80
00040000001C6C00 B85ABA102A48D559F7E63C36B33EB397
00040000001C6D00 28EFC296ADA0008BA173CC1D9D667A80
00040000001C6E00 A01E3EEA1908BFB83585722804875CB0
00040000001C7200 7AA960471D21D481D54B72E9BC616731
00040000001C7300 02E06CCCF83F612704B4BE34096F6CA6
Expand All @@ -1335,6 +1337,7 @@
00040000001C7B00 31F02A1261AC885FCE3386F26EAB6E93
00040000001C7D00 6BCA8B2BFB00445E560E2858C5F9478F
00040000001C7E00 9C63AD66731B3ACD47804025AEF5D57F
00040000001C7F00 6939B06B884CAEAC84EFB7458F730EB7
00040000001C8200 E093B5B390DC2A7A3840A622CEDB6DE6
00040000001C8300 A8BE57F742FE3C0B1BAAAA686AB8F6CF
00040000001C8F00 F989E5CC074D7F7448688884F7909E7A
Expand All @@ -1355,11 +1358,14 @@
00040000001CA200 D3A31A447A81425C4308D2D99310E502
00040000001CA300 6F179DF0E355AB23414208BAFAD065DB
00040000001CA400 53D071EFCB252B0C246765A17498E458
00040000001CA500 01366BF8549F70E4839A37BDC06194A8
00040000001CA800 BC766C1AAA7AD881F3705B894240D727
00040000001CA900 D14A49DE8677E5E65AACD895DC4DFD1F
00040000001CAA00 8FAE83DA2D9C9569F27603EB5272103E
00040000001CAB00 28F9D733E828EC064934EC36FACE3D07
00040000001CAC00 3753BB5D4CF2B52DE87899C76C7B204C
00040000001CAD00 DFF0981B156D63BD1BFB52475C4A7BED
00040000001CAF00 AE038D31BE7FAF900B9EEEB4A53990A8
00040000001CB000 4E73E57B7F2BD60857B294AE58B61CA3
00040000001CB100 28E43A09F5B3377D648C02841F70412C
00040000001CB200 4E6CB3CC968C565129923BA664CD2F55
Expand All @@ -1368,6 +1374,9 @@
00040000001CB600 338D239998E441C2EE84C5B5B514161B
00040000001CB800 1FBBF2D59FBC81943A624DA34FEEC162
00040000001CB900 6F0311322FAB582D51993568DED3D7E8
00040000001CBC00 8BD41630DDDFE8D9DD233D93EC23EAB6
00040000001CBD00 25E7C9D17F783DB1B86A94B19AF8B108
00040000001CBE00 AC2315994C584CEFF63A275318C19D0F
00040000001CBF00 24615F24DF7C3A1D4A373BC09D3DF958
00040000001CC200 A87C0C386FB328FBCD9ED0E3637556D9
00040000001CC300 25422DE201F14165BA517AD43B4DEEA9
Expand All @@ -1391,7 +1400,9 @@
00040000001CE000 B9C2D4CFDD33FEC7A65A5BC474A7AE1D
00040000001CE100 71D654EAA1A6B322D23D36B8A91A4201
00040000001CE800 BA12D61C0947FE59A22CC94EB32D3B5A
00040000001CEB00 72B530DFF67FD8C551A8183597C50F80
00040000001CEC00 FD82BA4BDA0D4746B68094BD7CFFEB9B
00040000001CEF00 53D1B727BA6BDF7D9A7CEC78EBB1F596
00040000001CF000 888CE18D78792D602193157C6AFA1B06
00040000001CF300 36DFFFEE9A7DFCAC75384E1E6A8C84A2
00040000001CF400 92B2CAD88DD7FC96A71115B1FFB4CED4
Expand All @@ -1410,18 +1421,28 @@
00040000001D0600 67455478122D3EB0A8539D6492DAD510
00040000001D0700 863C695C3DFD2644C85D73F151500C57
00040000001D0900 E9D344283411C3C4EE702EBF98DB6F85
00040000001D0B00 FE6EB0A7F1FEACAF40848CD010028F9A
00040000001D0C00 9ACF1243D40F4E79C75F3CC0B7254736
00040000001D0E00 208312DE6B0ABFD40E22CE974A285D1D
00040000001D0F00 532E9503CF50506843B4C76836CB0D21
00040000001D1100 B561A912C0A3631CFA7FE5E8597690BD
00040000001D1200 ECCAFDADC7BDF8777E67CB318CFF7289
00040000001D1300 09E9B2205D3DDFB05E9E440804B08E30
00040000001D1400 D36DEE9E54626273BFD0668274BDB188
00040000001D1500 3CF2955127C4FA64ADAB320DBFDFFD75
00040000001D1700 2B96FE16B49BDC862A17DFA0D449E43E
00040000001D1800 F0CC33A3E1335974330DD8AFDBF02E2F
00040000001D1900 79D9395948A747315BC29A02E13065BE
00040000001D1A00 1B60C2805B2FB1369E5231DF9A65F7DA
00040000001D1C00 07F366441872A944EF83E9E1F78F0805
00040000001D1D00 A25E54024200B2CBB261FE47DE3A92D6
00040000001D1E00 3711FE785629B420DDE9D310C0B09446
00040000001D1F00 AEC6A8A7ABD5E2487079949CAE40D3C3
00040000001D2100 B0A550FACE9B99AFC9910A578C9C7865
00040000001D2300 46D91E9C044DD75B854703026B85E169
00040000001D2400 A5F5AA0FBE6505649980012251C533B9
00040000001D2500 BC9243370D77A84CAC5DC3DC9C482859
00040000001D2700 84CEA7E7A68CAC2F8ED1BC7C87704E34
00040000001D2900 464AB26F2E87E980A5C7292B4E8E50DC
00040000001D2A00 5FB90283DE9DB528AC91BCA44428C355
00040000001D2B00 CE2F69DD4FCFFF021AE75FA77C52900D
Expand All @@ -1432,16 +1453,54 @@
00040000001D3200 BEA057914ED08ADE66495EDF381AEE3A
00040000001D3400 24B0CF214481EEF76A7A2F10B56E5EF5
00040000001D3500 06157406D199D1CEF9CFD89F82660BD2
00040000001D3700 F8FB4F00309B0C2D31258D10DE646F7F
00040000001D3800 960160100ACA5C0E53E0CFDFCC021484
00040000001D3900 BC30320024FFF702A89471FE4975D028
00040000001D3A00 55B883541350862ECEEAE64CA7A39EB8
00040000001D3B00 747C0F10C9D222EA59501114DB024192
00040000001D3C00 B7A0294B8712C2346438BFACD27B9D37
00040000001D3F00 1A82A36C84C2ECF1933D6156D7E3F333
00040000001D4000 80CA8BB3E11F631F01E7540AA3454CAE
00040000001D4500 9F62F7E161D51974F2CCE8B860CE749F
00040000001D4C00 DAC522C7FA4B8E1F3ED9D78A424624C9
00040000001D4E00 227757FFA5299D99F4D47DCBBB96CB67
00040000001D4F00 714793CA52E6C415EFB87AB4714881C2
00040000001D5000 2E6044040D93EA4F7AC4D7E1F49A6152
00040000001D5100 A17EC76A9967D1BDB177FC5EF59357D6
00040000001D5200 0D39528BAF4FAD790157BD69474B9040
00040000001D5300 255CDFBE6A1C3972C38D459363BBAB6C
00040000001D5400 49D45E1F8210ADAF2239F00B5B2987B2
00040000001D5500 3571D703D2A9B0B3FBE2465B6944EDC1
00040000001D5600 64531ECAAF1388CA9D25FF6CFE895EF4
00040000001D5700 97178F84A64C4076F33EC71F048F1D02
00040000001D5800 7A9275B3C6E3ED739967EE710507D289
00040000001D5900 5B2EACB93DFB1AC608FC96D8CC93CDE9
00040000001D5B00 61DDB60C735BC462213384CFBDD0A7E2
00040000001D5D00 C6444D1B4BF87167D4E2BCFDB672A5D3
00040000001D6400 6B73F89859EB463EB36ED56CF76ED059
00040000001D6500 A9BAEFBE2A26130D3F3CF4B9B459EB6D
00040000001D6600 E8B14AAC6B97F8DD5419D63E17BD86A8
00040000001D6700 9500A0CD71862351808F562A9E0A61F1
00040000001D6800 2EE8BB0C1277220EA80515A67BE795F5
00040000001D6900 C3BCF1424F34B32B283A22C328FB0CD0
00040000001D6A00 A73958BB9D4D2FE68230B15F35A31683
00040000001D6B00 DA03A2E1DBD7A9E3BE1926DDB679FC02
00040000001D6C00 CE196657DAD057778690FC84A3C84BE3
00040000001D6F00 5010F2D2C840FA5ABE9D7CA94B765B1E
00040000001D7200 8974BF03C548F5D2ECED338753E19D80
00040000001D7300 4245F9F8820DFFCD18020FC5A7A9FFE9
00040000001D7400 BC02E6103907A3604599573F37FE73EC
00040000001D7800 EB704CAC88F3CFF78B27F268C679CB1A
00040000001D7D00 14A95854B221AA65D740FDD4682DF318
00040000001D7E00 1D2C4FD379D03B2881AEA20BD5EA6081
00040000001D7F00 A4EC005FB33643721577738EECE512D3
00040000001D8100 6EEADE2CC983935F827054F17E423A66
00040000001D8300 442AF214741B666F339A785592145E0F
00040000001D8400 7BE6DF9CACD9A8D95845FFA69ED63707
00040000001D8500 C18928E8BEDAD9FB221F9B2959BA7C72
00040000001D8700 A7B10AC983C49A605405CBF6788F7169
00040000001D8800 BA292273F10F7F85FD6F739E94DF7575
00040000001D8900 ACB6BF8C424DDAB2146607ECEB2040C3
000400000F700400 0D65CBD40F2728586CA4DAE3B8681313
000400000F700700 C6EE84F157E15E8B7E716090D2ED5DE4
000400000F700800 9A83F7FEB62E8D9AACB5AA7761A00590
Expand Down Expand Up @@ -1654,13 +1713,17 @@
000400000F710600 7DF7D88BBE3938303682FE47614B1866
000400000F710900 204613AD9F10E857A75E09C2681C279D
000400000F710A00 BE305B9D3A68CD6B3F9A88DC1E683710
000400000F710B00 B181FE0F1094BF6C0D6EF11D7DA65929
000400000F710C00 23721014F98DDAE5512E2FDFDAF08D3D
000400000F710D00 CD3EF3D92CCDB32D2C7936D5F45BE04B
000400000F710E00 A334FE1E14A1C6226E80B6217EC78606
000400000F711000 9919326A5585EC0543108A0BBCB6510E
000400000F711300 1D7C4C84CD379BF6F5C761A9FF231394
000400000F711400 05ECFDAF4523E89731D6C7DAF8F2187E
000400000F711900 D626917A7152D30EB538365D644569E8
000400000F711D00 458BBD07FB3CD75A1EA094799C2416FF
000400000F711F00 AC73C3A018E83E89FA41A139BF054569
000400000F712000 60423DBB2E17052D3E04ABB04351F74D
000400000F712500 2D5A7BC5ED0F050E77E7E97297988235
000400000F712A00 1B0009156DABDE9D0B8CB0C1C41C2D70
000400000FF3E300 AA9B98FB66563D5E847A619E4D03DF15
4 changes: 2 additions & 2 deletions src/3dstool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ C3dsTool::SOption C3dsTool::s_Option[] =
{ USTR("compress-type"), 0, USTR("[blz|lz(ex)|h4|h8|rl|yaz0]\n\t\tthe type of the compress") },
{ USTR("compress-out"), 0, USTR("the output file of uncompressed or compressed") },
{ nullptr, 0, USTR(" yaz0:") },
{ USTR("yaz0-align"), 0, USTR("[0|128]\n\t\tthe alignment property of the yaz0 compressed file, optional") },
{ USTR("yaz0-align"), 0, USTR("[0|128|8192]\n\t\tthe alignment property of the yaz0 compressed file, optional") },
{ nullptr, 0, USTR(" diff:") },
{ USTR("old"), 0, USTR("the old file") },
{ USTR("new"), 0, USTR("the new file") },
Expand Down Expand Up @@ -978,7 +978,7 @@ C3dsTool::EParseOptionReturn C3dsTool::parseOptions(const UChar* a_pName, int& a
}
UString sYaz0Align = a_pArgv[++a_nIndex];
n32 nYaz0Align = SToN32(sYaz0Align);
if (nYaz0Align != 0 && nYaz0Align != 128)
if (nYaz0Align != 0 && nYaz0Align != 128 && nYaz0Align != 8192)
{
m_sMessage = sYaz0Align;
return kParseOptionReturnUnknownArgument;
Expand Down
65 changes: 65 additions & 0 deletions src/code.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,71 @@ void CCode::findGetRegionFunctionArm(SFunction& a_Function)
}
}
}
for (n32 i = 0; i < m_nArmCount; i++)
{
// mov r0, #0x20000
if (m_pArm[i] == 0xE3A00802)
{
SFunction function = { i, i };
findFunctionArm(function);
for (n32 j = i + 1; j < function.Last; j++)
{
// nn::svc::SendSyncRequest
m_uDisasmCount = cs_disasm(m_uHandle, reinterpret_cast<u8*>(m_pArm + j), 4, 0x100000 + j * 4, 0, &m_pInsn);
if (m_uDisasmCount > 0)
{
if (strcmp(m_pInsn->mnemonic, "bl") == 0 && m_pInsn->detail != nullptr)
{
cs_arm* pDetail = &m_pInsn->detail->arm;
if (pDetail->op_count == 1)
{
cs_arm_op* pArmOp0 = &pDetail->operands[0];
if (pArmOp0->type == ARM_OP_IMM && pArmOp0->imm >= 0x100000 && pArmOp0->imm + 8 <= 0x100000 + m_nArmCount * 4 && pArmOp0->imm % 4 == 0)
{
n32 nFunction = (pArmOp0->imm - 0x100000) / 4;
// svc 0x32
// bx lr
if (m_pArm[nFunction] == 0xEF000032 && m_pArm[nFunction + 1] == 0xE12FFF1E)
{
vFunction.push_back(function);
break;
}
}
}
}
}
}
}
}
// nn::cfg::CTR::detail::Initialize
for (n32 i = 0; i < m_nArmCount; i++)
{
// nn::srv::Initialize
// nn::Result
// Level -5 LEVEL_PERMANENT
// Summary 5 SUMMARY_INVALID_STATE
// Module 64 MODULE_NN_CFG
if (m_pArm[i] == 0xD8A103F9)
{
for (n32 j = i - 4; j < i + 4; j++)
{
if (j >= 0 && j < m_nArmCount)
{
for (vector<SFunction>::iterator it = vFunction.begin(); it != vFunction.end(); ++it)
{
SFunction& function = *it;
// nn::cfg::CTR::detail::IpcUser::s_Session
if (function.Last + 1 < m_nArmCount && m_pArm[j] == m_pArm[function.Last + 1])
{
a_Function.First = function.First;
a_Function.Last = function.Last;
return;
}
}
}
}
}
}
}

// nn::cfg::CTR::detail::IpcUser::GetRegion
Expand Down

0 comments on commit 387de14

Please sign in to comment.