C#, C♯, C#相談室 Part97

■ このスレッドは過去ログ倉庫に格納されています
2022/12/21(水) 10:18:38.02ID:DxBIri9+0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

■コードを貼る場合はこちら
http://ideone.com/

■前スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。

C#, C♯, C#相談室 Part96
https://mevius.5ch.net/test/read.cgi/tech/1639965805/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2022/12/22(木) 09:26:53.83ID:D6FSghNTa
この時代になっても相変わらず機械語は逆コンパイルできないと思いこんでるやついるのな
2022/12/22(木) 09:27:54.54ID:D6FSghNTa
こういう機械語にすればセキュリティ上がると思ってるやつが平気でパスワード埋め込むんだよなあ
4デフォルトの名無しさん (スッップ Sd8a-JDfe)
垢版 |
2022/12/22(木) 10:33:57.58ID:F1nh9mbrd
>>2
C#やJavaといった中間言語に比べたら、圧倒的に可読性が低いでしょ?
できる、できないの、ゼロか100かの議論ではないんだよ
可読性が低いほど、解析されにくくなる。
2022/12/22(木) 10:38:00.37ID:2NJjkJHb0
中途半端な知識を持つものがC#を避ける原因の一つだからな
C++と同レベルの難読性を持つのはC#が生き残るには大事な話だ
2022/12/22(木) 11:35:07.63ID:GxD81iq9a
解析されて困るのはパスワード埋め込んでる時だけだろ
機械語にしてもセキュリティ上がらないからそういうことするのやめとけ
2022/12/22(木) 11:40:40.23ID:aOWlk2Pu0
わざわざ逆アセンブルしなくてもexeから文字列抽出すれば平文パスワードを探せるしねぇ
2022/12/22(木) 12:30:52.54ID:U1HHZUYmM
難読化した処理追えるならマシン語の逆アセ読むくらいは出来るだろ
余分な処理入ってない分、後者のが楽まである
2022/12/22(木) 12:59:42.23ID:h+8LnyZL0
昔、機械語で書かれたとあるアプリをHEXエディタで開いたら、ASCIIコードで平文のままパスワードが埋め込まれてた事が有ったな
10デフォルトの名無しさん (スッップ Sd8a-JDfe)
垢版 |
2022/12/22(木) 14:41:12.05ID:F1nh9mbrd
>>6-7
パスワードを暗号化とかして格納するとして、
その場合に暗号化のロジックコードをかんたんに読まれなければ
安全性はかなり高くなる。
2022/12/22(木) 14:45:55.03ID:hTl9WjWG0
パスワードの照合ってハッシュ値を比較するもんだと思ってた
なんかすごい実装してるやついそうだな
2022/12/22(木) 14:52:55.31ID:HxQ/rgDMa
>>10
ならねーよ
2022/12/22(木) 15:06:15.12ID:HxQ/rgDMa
逆コンパイルするじゃん?
コンパイルしてデバッガ使うじゃん?
パスワード送信するところで止めるじゃん?
復号したパスワードを表示するかファイルに書き込むじゃん?
生パスワード手に入るじゃん?
14デフォルトの名無しさん (スッップ Sd8a-JDfe)
垢版 |
2022/12/22(木) 15:27:07.06ID:F1nh9mbrd
>>13
その手順の詳細はやったことないのでデタラメかわからんが、
そもそもパスワード保存したストレージに他人がアクセスできないという
前提があるんだから問題はないだろう。共用するデバイスであれば、
パスワードを保存しない運用をすればいいだけだから。

あと証券とかセキュリティが重要なアプリはログインパスワードとは別に
取引パスワードとかもあるのが普通。
あとは出金とかのときはSMS認証とかもある会社が増えている。
要するにパスワードなどの認証はひとつである必要もないし、セキュリティ要件などに
あわせて併用すればいいだけ。
15デフォルトの名無しさん (スッップ Sd8a-JDfe)
垢版 |
2022/12/22(木) 15:30:16.26ID:F1nh9mbrd
>>11
それそれ、たぶんいいたいかったのはそれ。
暗号化したら膨大な時間かけないと複合化できない。
だからハッシュ。
DBの中にもパスワードのハッシュ値を格納するのがふつうなんでしょ、たしか。

>>13
暗号化したものは容易に複合化できないわけだが?
量子コンピューターとかないと無理でしょ
思いつきでいいかげんなこと書いてるでしょ?
2022/12/22(木) 15:49:37.33ID:4fbwDn1A0
>>15
>>10を読んでやれよw
そもそも実行ファイルにパスワード埋め込むなって話をしてるんだぞw
2022/12/22(木) 16:02:26.76ID:Qca7zyGd0
>native codeじゃないとかんたんに
>サーバーの認証のコードが漏れちゃうでしょ
>セキュリティ大事

発端はコレでしょ?
ハッシュでも暗号化文字列でもクライアントに共有シークレット埋め込んでる限り脆弱
少しスキルのある人間に悪用されるのは致し方ないと諦められるものじゃなければ仕組みを変える必要がある
2022/12/22(木) 16:03:27.41ID:Qca7zyGd0
ありゃ
全部同じ人だった
2022/12/22(木) 16:13:14.56ID:UcBjTq9Sa
>>18
ああ認証コードがわからないのか
ログインパスワードのことだぞ
2022/12/22(木) 16:39:53.08ID:2NJjkJHb0
パスワードっぽいのを仕込んでおいて遊んでみたい
2022/12/22(木) 16:50:44.38ID:RLY1K78+0
ログインパスワードをハードコードとか斬新だな
APIキーみたいな認証コードの話かと思った
2022/12/22(木) 16:58:48.83ID:iWtJ1OLb0
そんな次元なの?

パスワードの判明ならそれこそパスワードが合ってたかどうか、のif文に相当する命令を反転させたりnopにするという古典的な方法で別にパスワードがどうでも良くなるでしょ。そんなネイティブコンパイルされるか否か程度が問題なら。

アタッチして、パスワードが違うぞってダイアログ出てる状態からジャンプを逆に辿るだけなのでテクニックも何も無い。

何の意味も無くない?
2022/12/22(木) 18:43:36.71ID:+Rbmc+Rn0
>>21
斬新でもなんでもなくて、今ほどセキュリティにうるさくなかった昔には結構あったぞ

結局は要求される強度とかける手間との兼ね合い
2022/12/22(木) 18:48:29.53ID:HmVrE67C0
iniファイルにパスワードがそのまま記述もたまに
25デフォルトの名無しさん (ワッチョイ 535f-8Cre)
垢版 |
2022/12/22(木) 18:58:21.99ID:y9FZhiQ70
悪用って犯罪じゃないの?
警察どこいった?
2022/12/24(土) 11:07:26.72ID:o3kFQyD40
.NETってinternalに良いもん隠しすぎやろ
2022/12/24(土) 18:18:14.65ID:37MAMfIj0
便利機能を使うためにリフレクションで仕方なくアクセスするの面倒すぎる
2022/12/26(月) 17:01:22.79ID:OeooOgrR0
以下のurlにあるライブラリを使ってrar5形式の書庫内にあるファイル一覧を取得しようとしたのですが取れませんでした。
ライブラリのソースを見ましたが、単に7z.dllの内部にある関数を呼んでいるだけのようでした。
7z.dll同梱の7z.exeでファイル一覧の取得、解凍できるのは確認しています。
何が原因かわかる方いらっしゃいますか?

7z.dllのバージョンは21.7.0.0
VisualStudio2019でビルドしました。

ttps://www.codeproject.com/script/articles/viewdownloads.aspx?aid=27148
2022/12/26(月) 17:55:31.33ID:5LxkM09pa
>>28
> 何が原因かわかる方いらっしゃいますか?
プログラマ
2022/12/26(月) 18:31:10.64ID:bU1T9eUn0
どんなコード書いているのかどんなエラーなのか言わないと分かりようが無いw
2022/12/26(月) 18:37:00.63ID:OeooOgrR0
>>30
ライブラリのzipの中のサンプルコードです。
2022/12/26(月) 18:53:53.57ID:oItrOIBr0
それ2008年のでしょrar5に対応してないんじゃないの?
2022/12/31(土) 17:00:08.94ID:Y1+2Lu7M0
ByteArrayContentとReadOnlyMemoryContentの違いってなんかあるの?
2022/12/31(土) 19:10:27.88ID:1otgbzig0
あるよ
35デフォルトの名無しさん (ワッチョイ 4e10-Rw9z)
垢版 |
2023/01/02(月) 14:11:18.53ID:AlCNR49a0
C#ってC言語で作ったdllを呼べるけど、
そのdllが暗号化されていたのものでもメモリ上で複合化しながら呼べますか?
2023/01/02(月) 14:49:57.94ID:EJhafa7da
俺はできる
お前ができるかは知らん
2023/01/02(月) 15:46:23.56ID:ChZi0Din0
>>35
本来利用してるプロセスが復号化してからロードしているのならその復号化ロジックを自前のC#アプリでも実装しないと呼べない
38デフォルトの名無しさん (ワッチョイ 4e10-Rw9z)
垢版 |
2023/01/02(月) 20:19:04.23ID:AlCNR49a0
>>37
ありがとうございます
2023/01/04(水) 00:16:32.10ID:N/2omZ3g0
C#ってネイティブなdllも動的にロードできるんだっけ?
2023/01/05(木) 11:22:59.00ID:ltDktvBL0
DLLを動的ロードして関数ポインタを取り出す部分はどっちかというとOSの仕事だしそこはDllImportとかに任せて
関数ポインタさえ手に入れば
.NET 2.0からデリゲートに変換できるメソッドがあるし
C# 9.0でそのまま扱うこともできるようになったよ
2023/01/05(木) 11:51:26.91ID:pzJhf9FT0
>>39
そりゃ当然出来る
型や呼び出し規約を合わせるのは自己責任だが
2023/01/05(木) 13:00:22.76ID:92Gx4s1W0
アンマネージド使うのは自己責任で
2023/01/05(木) 14:07:29.25ID:HFE02prZr
c++/cli 作って橋渡ししてたわ
2023/01/06(金) 00:26:12.47ID:rNk5rLcjM
とあるクラスにあるすべてのプロパティを読み取り専用にしたいんだけど、なにか良い方法ありますか?
やっぱり継承してプロパティの数だけ読み取り専用プロパティで定義するしかない?
45デフォルトの名無しさん (スプッッ Sdba-kLll)
垢版 |
2023/01/06(金) 07:59:18.36ID:vZ5ptmnXd
継承させたところで元クラスにアップキャストされたら終わり
constにさせる方法はたぶんないと思う
2023/01/06(金) 12:38:09.71ID:vCsnZijhM
recordにしたら
2023/01/06(金) 12:49:52.37ID:buYHqiH80
C#って地味にこの辺弱いよな
C++のconst ポインタと同等の機能があればReadOnlyCollectionとかReadOnlySpanなんてそもそもいらないのに
2023/01/06(金) 14:18:25.75ID:QdJf8bLxa
C++なら継承して読み取り専用にできると思ってるのか
2023/01/06(金) 14:27:10.69ID:zhrc9IIn0
いや継承は必要なくて、C++なら単にそのクラスのインスタンスを格納する変数や引数の型をconstにするだけで読み取り専用になるよ
TypeScriptもReadOnly<X>とするだけで簡単に読み取り専用のXの型を作れる
2023/01/06(金) 15:16:54.53ID:QdJf8bLxa
方法が違うだけでC#でも簡単にできるだろw
51デフォルトの名無しさん (アウアウウー Sac7-7txW)
垢版 |
2023/01/06(金) 17:46:49.43ID:MJJvxMZsa
>>50
どうやるの?
2023/01/06(金) 19:39:06.39ID:7HwChuQ+0
>>49
それ、そのクラスのプロパティも読み取り専用になるのか?
2023/01/06(金) 20:12:53.98ID:KHJficEWa
>>52
C++のconstの場合は、フィールドが全て読み取り専用になり、読み取り専用(const)としてマークされたメソッドしか呼べなくなる
TypeScriptのReadonly<>の場合は、全プロパティが読み取り専用になった「型」が生成される
TypeScriptというかJSではメソッドは単に関数を返すプロパティなので、メソッドの内容には特に関知しない
2023/01/07(土) 10:18:16.28ID:FC273Y3JM
>>44
誰かが書いてるけどrecordじゃだめなん?

public record Person(string FirstName, string LastName);
2023/01/07(土) 11:12:47.51ID:ErVvBSvoM
>>53
何それ凄い便利じゃん

>>54
できればプロパティを1つ1つ書きたくないんだよね
2023/01/07(土) 11:42:41.36ID:iltXkPxC0
継承後のクラス定義って、継承前より厳しくできたっけ?
2023/01/07(土) 13:01:01.65ID:FC273Y3JM
>>55
いやいやw
これでもう終わりでreadonlyだよ
2023/01/07(土) 13:01:54.79ID:FC273Y3JM
これ以上短い書き方なんてできるか?
2023/01/07(土) 13:51:35.25ID:unZBLw7Xd
質問者は既存のミュータブルなクラスのプロパティを読み取り専用にしようとしている
>>54だと同じプロパティを全部定義し直さなきゃいけないし、元のクラスからコピーする手間も必要だ
>>49の方法であればプロパティを定義し直す必要もコピーする必要もない
2023/01/07(土) 14:55:27.90ID:FC273Y3JM
既存のプロパティに当たるものをconstにするのは全部定義しなおしてるの同じなんだけど…

どういうやり方で既存のプロパティを定義してるのかもわからないし意味不明だなと
2023/01/07(土) 14:56:55.34ID:FC273Y3JM
うまく行くならプロパティのsetをinitアクセサに変えるだけなんだけど
2023/01/07(土) 15:35:50.01ID:FC273Y3JM
特定のコンテキストで書き換え不可
状況次第で書き換えの可否を変える
とかならめんどいけどそういう話じゃないんだろ
2023/01/07(土) 16:17:29.42ID:rg/VZrjHa
>>60
いやまともなC++のコードならgetterはconstで定義されてるはずだから、変数の型をconstにするだけでreadonlyになるよ
64デフォルトの名無しさん (ワッチョイ 9301-GR7q)
垢版 |
2023/01/07(土) 17:38:18.83ID:mDCtTa800
君たち的に.NET MAUIでandroid,iphone,WindowsでC#のネタ帳的なの作ったら協力してくれる?
小ネタ集みたいなのを各々がSQLで保存してそれをカテゴリ分けで見れるようにするやつ
例えばRestAPI関係だったりの基本的な書き方を表示したりできる
ネットで調べれば一発だが1つにまとまってるのは利点かと、、、
65デフォルトの名無しさん (ワッチョイ 1176-1Rsz)
垢版 |
2023/01/07(土) 17:48:11.52ID:odL5Q3k30
wiki立ち上げればええやん
2023/01/07(土) 18:07:01.95ID:FC273Y3JM
多分世界中のc#プログラマの99.9%は.NET MAUIに興味ないと思う
67デフォルトの名無しさん (ワッチョイ b101-phWz)
垢版 |
2023/01/07(土) 18:08:54.54ID:St5PAkDm0
winui3でよくね?
2023/01/07(土) 18:14:01.42ID:FC273Y3JM
と言うよりいい加減いくつフレームワーク立ち上げれば済むんだよ

モバイル関連は全部html+jsにしてデバイスを仮想サーバにしてそいつにREST api投げてjsonでセンサ値とか取るようにすればいい
そしたらもう再生産しなくていい
2023/01/07(土) 18:17:46.74ID:unZBLw7Xd
>>64
コンテンツが利用者頼みのサービスは最初自分で頑張るか金出すかしてコンテンツを揃えない限り必ず失敗する
というわけでまずは自分で頑張れ
70デフォルトの名無しさん (ワッチョイ 9301-GR7q)
垢版 |
2023/01/07(土) 18:24:07.38ID:mDCtTa800
>>69
なるほど
2023/01/07(土) 18:25:21.79ID:FC273Y3JM
一度覚えた技術を何十年も使いまわせるような仕組みにしろよ
都度都度新しいAPIセット出して馬鹿なのかMSは?
2023/01/07(土) 18:30:58.40ID:UPEdDe6/0
ワッチョイ 9301
こいつマウイ君だろ、自分のスレでやれ。NG
73デフォルトの名無しさん (ワッチョイ b101-phWz)
垢版 |
2023/01/07(土) 18:44:15.99ID:St5PAkDm0
ここにまでマウイ出張ってきたか
ちゃんとワッチョイを恐れろよ
2023/01/07(土) 20:02:44.89ID:Xl5j6yUn0
マウいじゃん
2023/01/07(土) 21:02:06.62ID:FC273Y3JM
そんなにマウいかな?
2023/01/07(土) 21:14:41.15ID:mnUUIrvLa
チョベリグ
77デフォルトの名無しさん (ワッチョイ 515f-DWwd)
垢版 |
2023/01/07(土) 22:07:32.34ID:8LnSupdD0
>>64
> 例えばRestAPI関係だったりの基本的な書き方を表示したりできる
今からこの手のサービスやってもCopilotに勝てないだろ
78デフォルトの名無しさん (ワッチョイ 9301-GR7q)
垢版 |
2023/01/07(土) 23:32:10.91ID:mDCtTa800
>>77
copilotって別にこれしたいって言えば全部記入してくれるわけじゃなくね?
俺としてはあぁRestAPIの使い方ど忘れした~
なんだったっけ???ってGoogleで調べる時間をアプリで素早く検索できるって感じのものを作りたいかな
2,3回やったことあるやつでもどうだったっけ?って忘れることままある
まぁGoogleとかでいいんだけど1つのアプリにまとまってるってのはなかなか便利なんじゃないかなと…
79デフォルトの名無しさん (ワッチョイ 9301-GR7q)
垢版 |
2023/01/07(土) 23:32:40.09ID:mDCtTa800
自分で追加もできるしな
2023/01/08(日) 16:11:14.19ID:qCDijd6S0
Aクラスを継承したBクラスがあります
BクラスのリストにAクラスをAddしたいんですが、どうすればいいのでしょうか?
2023/01/08(日) 16:20:03.96ID:PrLa9yfk0
>>80
それは無理
Bは絶対にAだけどAはBとは限らないでしょ?
つまりAクラスのリストにするしかない
まあUnsafe.As使えば無理矢理入れられるけど
2023/01/08(日) 16:24:40.95ID:GEbVHkXI0
>>80みたいな質問する奴って意味も分からず継承使ってたりしてそうで怖いわw
83デフォルトの名無しさん (ワッチョイ 1176-1Rsz)
垢版 |
2023/01/08(日) 16:25:49.80ID:+2bxRzY60
A a=new B(); とかで、実体がB型かもしれないならBにキャストすればいい。
A a=new A(); でA型そのものだったらそもそもこの話は成立しない。

list.Add((B)a);
2023/01/08(日) 16:40:39.00ID:Z6otLx+Dd
>>78
massCodeとかgistとかでいいんじゃない
85デフォルトの名無しさん (ワッチョイ 9301-GR7q)
垢版 |
2023/01/08(日) 16:50:26.87ID:+xzWagUM0
>>80
継承じゃなくてBクラスにAクラスのプロパティのリストを入れる場合はたしかいけたぞ
2023/01/10(火) 13:29:49.07ID:yPlBxuJ3M
>>71
ほんとこれ
2023/01/10(火) 15:05:52.75ID:ZisiPnco0
スマホアプリ作ってると毎年アプデで便利な機能がdeprecatedされてくのがストレス
それに比べたらMSの方が優しい
2023/01/10(火) 17:23:44.95ID:qAIynO1bM
>>86
それじゃ入門書売れないだろ
バカ?
2023/01/10(火) 18:28:40.94ID:IC+XgAqf0
android何かも最近コード書いてないけど、非推奨や消えたりする機能が結構あるよね
古いコードをメンテナンスするときに良く引っかかる気がするわ
90デフォルトの名無しさん (ワッチョイ b101-tb1I)
垢版 |
2023/01/10(火) 19:16:36.48ID:0yW4rCRf0
C言語の重力付き4目並べです、ここのコードを簡略化したいです。

int SetXpos(int player) // コマの置き場所を入力または探して盤を更新,コマの置き場所(0-6)を返す
{
int xpos = 0; // コマの置き場所
if ((choice == 2 && player == 2) || (choice == 3 && player == 1)) // コンピュータとの対戦の場合に,コンピュータの手を計算
{
xpos = ComputeXpos(player);
printf("%sの番です\n", player == 1 ? "●" : "〇");
printf("コンピュータは%dに置きます\n", xpos);
}
else // 人間の手を選択
{
while (1)
{
printf("%sの番です\n", player == 1 ? "●" : "〇");
printf("どこに置きますか? 0-6の数字を半角で入力してください: ");
scanf_s("%d", &xpos);
if ((0 <= xpos && xpos < XMAX) && (num[xpos] < YMAX)) // 置ける場所かどうか判定
break;
printf("%dには置けません!\n", xpos);
}
}
board[xpos][num[xpos]++] = player;// コマをxpos列に置き,xpos列のコマ数を1増やす
return xpos;
}
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況